diff --git a/.github/workflows/assets_artifact_build.yml b/.github/workflows/assets_artifact_build.yml
index 5da304ec..a74ae7cc 100644
--- a/.github/workflows/assets_artifact_build.yml
+++ b/.github/workflows/assets_artifact_build.yml
@@ -27,7 +27,7 @@ jobs:
APP_ENV: prod
steps:
- - uses: actions/checkout@v7
+ - uses: actions/checkout@v6
- name: Setup PHP
uses: shivammathur/setup-php@v2
diff --git a/.github/workflows/docker_build.yml b/.github/workflows/docker_build.yml
index d1f53c38..210dbc18 100644
--- a/.github/workflows/docker_build.yml
+++ b/.github/workflows/docker_build.yml
@@ -32,7 +32,7 @@ jobs:
steps:
-
name: Checkout
- uses: actions/checkout@v7
+ uses: actions/checkout@v6
-
name: Docker meta
id: docker_meta
diff --git a/.github/workflows/docker_frankenphp.yml b/.github/workflows/docker_frankenphp.yml
index fc69b29b..36ec322d 100644
--- a/.github/workflows/docker_frankenphp.yml
+++ b/.github/workflows/docker_frankenphp.yml
@@ -32,7 +32,7 @@ jobs:
steps:
-
name: Checkout
- uses: actions/checkout@v7
+ uses: actions/checkout@v6
-
name: Docker meta
id: docker_meta
diff --git a/.github/workflows/static_analysis.yml b/.github/workflows/static_analysis.yml
index cbc42d27..f47ce87b 100644
--- a/.github/workflows/static_analysis.yml
+++ b/.github/workflows/static_analysis.yml
@@ -19,7 +19,7 @@ jobs:
runs-on: ubuntu-22.04
steps:
- - uses: actions/checkout@v7
+ - uses: actions/checkout@v6
- name: Setup PHP
uses: shivammathur/setup-php@v2
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 66086104..27dfe173 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -46,7 +46,7 @@ jobs:
if: matrix.db-type == 'postgres'
- name: Checkout
- uses: actions/checkout@v7
+ uses: actions/checkout@v6
- name: Setup PHP
uses: shivammathur/setup-php@v2
diff --git a/public/kicad/footprints.txt b/public/kicad/footprints.txt
index 08380de1..a0b41279 100644
--- a/public/kicad/footprints.txt
+++ b/public/kicad/footprints.txt
@@ -1,4 +1,4 @@
-# Generated on Mon Jun 22 07:31:48 UTC 2026
+# Generated on Mon Jun 15 07:28:00 UTC 2026
# This file contains all footprints available in the offical KiCAD library
Audio_Module:Reverb_BTDR-1H
Audio_Module:Reverb_BTDR-1V
@@ -8293,7 +8293,6 @@ Converter_DCDC:Converter_DCDC_Hamamatsu_C11204-1_THT
Converter_DCDC:Converter_DCDC_MeanWell_NID30_THT
Converter_DCDC:Converter_DCDC_MeanWell_NID60_THT
Converter_DCDC:Converter_DCDC_MeanWell_NSD10_THT
-Converter_DCDC:Converter_DCDC_MeanWell_SMU02x-xxN_THT
Converter_DCDC:Converter_DCDC_Murata_CRE1xxxxxx3C_THT
Converter_DCDC:Converter_DCDC_Murata_CRE1xxxxxxDC_THT
Converter_DCDC:Converter_DCDC_Murata_CRE1xxxxxxSC_THT
@@ -13031,6 +13030,8 @@ Package_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm
Package_SON:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm_ThermalVias
Package_SON:WSON-6-1EP_3x3mm_P0.95mm
Package_SON:WSON-6_1.5x1.5mm_P0.5mm
+Package_SON:WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm
+Package_SON:WSON-8-1EP_2x2mm_P0.5mm_EP0.9x1.6mm_ThermalVias
Package_SON:WSON-8-1EP_3x2.5mm_P0.5mm_EP1.2x1.5mm_PullBack
Package_SON:WSON-8-1EP_3x2.5mm_P0.5mm_EP1.2x1.5mm_PullBack_ThermalVias
Package_SON:WSON-8-1EP_3x3mm_P0.5mm_EP1.2x2mm
diff --git a/public/kicad/symbols.txt b/public/kicad/symbols.txt
index a24a1785..b07fbf28 100644
--- a/public/kicad/symbols.txt
+++ b/public/kicad/symbols.txt
@@ -1,4 +1,4 @@
-# Generated on Mon Jun 22 07:32:26 UTC 2026
+# Generated on Mon Jun 15 07:28:38 UTC 2026
# This file contains all symbols available in the offical KiCAD library
4xxx:14528
4xxx:14529
@@ -4954,7 +4954,6 @@ Converter_DCDC:RPMH15-1.5
Converter_DCDC:RPMH24-1.5
Converter_DCDC:RPMH3.3-1.5
Converter_DCDC:RPMH5.0-1.5
-Converter_DCDC:SMU02L-24N
Converter_DCDC:TBA1-0310
Converter_DCDC:TBA1-0311
Converter_DCDC:TBA1-0510
@@ -6143,7 +6142,6 @@ Device:SparkGap
Device:Speaker
Device:Speaker_Crystal
Device:Speaker_Ultrasound
-Device:Thermal_Jumper
Device:Thermistor
Device:Thermistor_NTC
Device:Thermistor_NTC_3Wire
@@ -19299,7 +19297,6 @@ Regulator_Switching:LT1373HVCN8
Regulator_Switching:LT1373HVCS8
Regulator_Switching:LT1377CN8
Regulator_Switching:LT1377CS8
-Regulator_Switching:LT1931
Regulator_Switching:LT1945
Regulator_Switching:LT3430
Regulator_Switching:LT3430-1
@@ -22519,7 +22516,6 @@ Transistor_FET_Other:Q_NMOS_Depletion_GDS
Transistor_FET_Other:Q_NMOS_Depletion_GSD
Transistor_FET_Other:Q_NMOS_Depletion_SDG
Transistor_FET_Other:Q_NMOS_Depletion_SGD
-Transistor_FET_Other:SP010N70T8
Transistor_FET_Other:VNB35N07xx-E
Transistor_FET_Other:VNP10N07
Transistor_FET_Other:VNP35N07xx-E
diff --git a/src/Entity/Attachments/AttachmentType.php b/src/Entity/Attachments/AttachmentType.php
index 03bb8031..7a314ffe 100644
--- a/src/Entity/Attachments/AttachmentType.php
+++ b/src/Entity/Attachments/AttachmentType.php
@@ -65,16 +65,21 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/attachment_types/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: AttachmentType::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of an attachment type.'),
- security: 'is_granted("@attachment_types.read")'
- ),
],
normalizationContext: ['groups' => ['attachment_type:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['attachment_type:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/attachment_types/{id}/children.{_format}',
+ operations: [
+ new GetCollection(openapi: new Operation(summary: 'Retrieves the children elements of an attachment type.'),
+ security: 'is_granted("@attachment_types.read")')
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: AttachmentType::class)
+ ],
+ normalizationContext: ['groups' => ['attachment_type:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/Parts/Category.php b/src/Entity/Parts/Category.php
index 80fcc43c..22f8a3e4 100644
--- a/src/Entity/Parts/Category.php
+++ b/src/Entity/Parts/Category.php
@@ -68,16 +68,23 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/categories/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: Category::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a category.'),
- security: 'is_granted("@categories.read")'
- ),
],
normalizationContext: ['groups' => ['category:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['category:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/categories/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a category.'),
+ security: 'is_granted("@categories.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: Category::class)
+ ],
+ normalizationContext: ['groups' => ['category:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/Parts/Footprint.php b/src/Entity/Parts/Footprint.php
index 2027a310..3d8be686 100644
--- a/src/Entity/Parts/Footprint.php
+++ b/src/Entity/Parts/Footprint.php
@@ -67,16 +67,23 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/footprints/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: Footprint::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a footprint.'),
- security: 'is_granted("@footprints.read")'
- ),
],
normalizationContext: ['groups' => ['footprint:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['footprint:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/footprints/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a footprint.'),
+ security: 'is_granted("@footprints.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: Footprint::class)
+ ],
+ normalizationContext: ['groups' => ['footprint:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/Parts/Manufacturer.php b/src/Entity/Parts/Manufacturer.php
index 76526c31..0edf8232 100644
--- a/src/Entity/Parts/Manufacturer.php
+++ b/src/Entity/Parts/Manufacturer.php
@@ -66,16 +66,23 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/manufacturers/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: Manufacturer::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a manufacturer.'),
- security: 'is_granted("@manufacturers.read")'
- ),
],
normalizationContext: ['groups' => ['manufacturer:read', 'company:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['manufacturer:write', 'company:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/manufacturers/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a manufacturer.'),
+ security: 'is_granted("@manufacturers.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: Manufacturer::class)
+ ],
+ normalizationContext: ['groups' => ['manufacturer:read', 'company:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/Parts/MeasurementUnit.php b/src/Entity/Parts/MeasurementUnit.php
index e775b65b..6dd0b9f2 100644
--- a/src/Entity/Parts/MeasurementUnit.php
+++ b/src/Entity/Parts/MeasurementUnit.php
@@ -71,16 +71,23 @@ use Symfony\Component\Validator\Constraints\Length;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/measurement_units/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: MeasurementUnit::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a MeasurementUnit.'),
- security: 'is_granted("@measurement_units.read")'
- ),
],
normalizationContext: ['groups' => ['measurement_unit:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['measurement_unit:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/measurement_units/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a MeasurementUnit.'),
+ security: 'is_granted("@measurement_units.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: MeasurementUnit::class)
+ ],
+ normalizationContext: ['groups' => ['measurement_unit:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment", "unit"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/Parts/StorageLocation.php b/src/Entity/Parts/StorageLocation.php
index 9571da6e..7ba400d9 100644
--- a/src/Entity/Parts/StorageLocation.php
+++ b/src/Entity/Parts/StorageLocation.php
@@ -67,16 +67,23 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/storage_locations/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: StorageLocation::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a storage location.'),
- security: 'is_granted("@storelocations.read")'
- ),
],
normalizationContext: ['groups' => ['location:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['location:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/storage_locations/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a storage location.'),
+ security: 'is_granted("@storelocations.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: StorageLocation::class)
+ ],
+ normalizationContext: ['groups' => ['location:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/Parts/Supplier.php b/src/Entity/Parts/Supplier.php
index 75cf62d1..2c004e9e 100644
--- a/src/Entity/Parts/Supplier.php
+++ b/src/Entity/Parts/Supplier.php
@@ -71,16 +71,21 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/suppliers/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: Supplier::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a supplier.'),
- security: 'is_granted("@manufacturers.read")'
- ),
],
normalizationContext: ['groups' => ['supplier:read', 'company:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['supplier:write', 'company:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/suppliers/{id}/children.{_format}',
+ operations: [new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a supplier.'),
+ security: 'is_granted("@manufacturers.read")'
+ )],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: Supplier::class)
+ ],
+ normalizationContext: ['groups' => ['supplier:read', 'company:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/PriceInformations/Currency.php b/src/Entity/PriceInformations/Currency.php
index 507ec810..4a811aa0 100644
--- a/src/Entity/PriceInformations/Currency.php
+++ b/src/Entity/PriceInformations/Currency.php
@@ -71,16 +71,23 @@ use Symfony\Component\Validator\Constraints as Assert;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/currencies/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: Currency::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a currency.'),
- security: 'is_granted("@currencies.read")'
- ),
],
normalizationContext: ['groups' => ['currency:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['currency:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/currencies/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a currency.'),
+ security: 'is_granted("@currencies.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: Currency::class)
+ ],
+ normalizationContext: ['groups' => ['currency:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment", "iso_code"])]
#[ApiFilter(DateFilter::class, strategy: DateFilterInterface::EXCLUDE_NULL)]
diff --git a/src/Entity/PriceInformations/Orderdetail.php b/src/Entity/PriceInformations/Orderdetail.php
index 8b5c9f7b..56428e3a 100644
--- a/src/Entity/PriceInformations/Orderdetail.php
+++ b/src/Entity/PriceInformations/Orderdetail.php
@@ -71,17 +71,23 @@ use Symfony\Component\Validator\Constraints\Length;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/parts/{id}/orderdetails.{_format}',
- uriVariables: ['id' => new Link(toProperty: 'part', fromClass: Part::class)],
- normalizationContext: ['groups' => ['orderdetail:read', 'pricedetail:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
- openapi: new Operation(summary: 'Retrieves the orderdetails of a part.'),
- security: 'is_granted("@parts.read")'
- ),
],
normalizationContext: ['groups' => ['orderdetail:read', 'orderdetail:read:standalone', 'api:basic:read', 'pricedetail:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['orderdetail:write', 'api:basic:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/parts/{id}/orderdetails.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the orderdetails of a part.'),
+ security: 'is_granted("@parts.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(toProperty: 'part', fromClass: Part::class)
+ ],
+ normalizationContext: ['groups' => ['orderdetail:read', 'pricedetail:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["supplierpartnr", "supplier_product_url"])]
diff --git a/src/Entity/ProjectSystem/Project.php b/src/Entity/ProjectSystem/Project.php
index 34e77051..f4a3e9de 100644
--- a/src/Entity/ProjectSystem/Project.php
+++ b/src/Entity/ProjectSystem/Project.php
@@ -66,16 +66,23 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
new Post(securityPostDenormalize: 'is_granted("create", object)'),
new Patch(security: 'is_granted("edit", object)'),
new Delete(security: 'is_granted("delete", object)'),
- new GetCollection(
- uriTemplate: '/projects/{id}/children.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'children', fromClass: Project::class)],
- openapi: new Operation(summary: 'Retrieves the children elements of a project.'),
- security: 'is_granted("@projects.read")'
- ),
],
normalizationContext: ['groups' => ['project:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['project:write', 'api:basic:write', 'attachment:write', 'parameter:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/projects/{id}/children.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the children elements of a project.'),
+ security: 'is_granted("@projects.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'children', fromClass: Project::class)
+ ],
+ normalizationContext: ['groups' => ['project:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment"])]
#[ApiFilter(OrderFilter::class, properties: ['name', 'id', 'addedDate', 'lastModified'])]
diff --git a/src/Entity/ProjectSystem/ProjectBOMEntry.php b/src/Entity/ProjectSystem/ProjectBOMEntry.php
index c016d741..2a7862ec 100644
--- a/src/Entity/ProjectSystem/ProjectBOMEntry.php
+++ b/src/Entity/ProjectSystem/ProjectBOMEntry.php
@@ -63,16 +63,23 @@ use Symfony\Component\Validator\Context\ExecutionContextInterface;
new Post(uriTemplate: '/project_bom_entries.{_format}', securityPostDenormalize: 'is_granted("create", object)',),
new Patch(uriTemplate: '/project_bom_entries/{id}.{_format}', security: 'is_granted("edit", object)',),
new Delete(uriTemplate: '/project_bom_entries/{id}.{_format}', security: 'is_granted("delete", object)',),
- new GetCollection(
- uriTemplate: '/projects/{id}/bom.{_format}',
- uriVariables: ['id' => new Link(fromProperty: 'bom_entries', fromClass: Project::class)],
- openapi: new Operation(summary: 'Retrieves the BOM entries of the given project.'),
- security: 'is_granted("@projects.read")'
- ),
],
normalizationContext: ['groups' => ['bom_entry:read', 'api:basic:read'], 'openapi_definition_name' => 'Read'],
denormalizationContext: ['groups' => ['bom_entry:write', 'api:basic:write'], 'openapi_definition_name' => 'Write'],
)]
+#[ApiResource(
+ uriTemplate: '/projects/{id}/bom.{_format}',
+ operations: [
+ new GetCollection(
+ openapi: new Operation(summary: 'Retrieves the BOM entries of the given project.'),
+ security: 'is_granted("@projects.read")'
+ )
+ ],
+ uriVariables: [
+ 'id' => new Link(fromProperty: 'bom_entries', fromClass: Project::class)
+ ],
+ normalizationContext: ['groups' => ['bom_entry:read', 'api:basic:read'], 'openapi_definition_name' => 'Read']
+)]
#[ApiFilter(PropertyFilter::class)]
#[ApiFilter(LikeFilter::class, properties: ["name", "comment", 'mountnames'])]
#[ApiFilter(RangeFilter::class, properties: ['quantity'])]
diff --git a/translations/frontend.zh.xlf b/translations/frontend.zh.xlf
index bdb053d6..7425b1e8 100644
--- a/translations/frontend.zh.xlf
+++ b/translations/frontend.zh.xlf
@@ -10,7 +10,7 @@
part.labelp
- 物料
+ 部件
@@ -34,7 +34,7 @@
user.password_strength.medium
- 中等
+ 中
@@ -52,15 +52,9 @@
search.submit
- 搜索
+ GO!
-
-
- user.password_strength.crack_time
- 预计破解时间:%time%
-
-
dialog.btn.ok
diff --git a/translations/messages.zh.xlf b/translations/messages.zh.xlf
index 7083c3ff..fde08cfe 100644
--- a/translations/messages.zh.xlf
+++ b/translations/messages.zh.xlf
@@ -1,49 +1,49 @@
-
+
-
+
attachment_type.caption
- 附件的文件类型
+ 附件类型
-
+
new
attachment_type.edit
- 编辑附件类型
+ 编辑文件类型
-
+
new
attachment_type.new
- 新建附件类型
+ 新建类型
-
+
category.labelp
类别
-
+
admin.options
选项
-
+
admin.advanced
高级
-
+
new
@@ -52,7 +52,7 @@
编辑类别
-
+
new
@@ -61,19 +61,25 @@
新建类别
-
+
- currency.iso_code.caption
- ISO代码
+ currency.caption
+ 货币
-
+
+
+ currency.iso_code.caption
+ 货币ISO代码
+
+
+
currency.symbol.caption
货币符号
-
+
new
@@ -82,7 +88,7 @@
编辑货币
-
+
new
@@ -91,7 +97,7 @@
新建货币
-
+
new
@@ -100,7 +106,7 @@
编辑项目
-
+
new
@@ -109,118 +115,118 @@
新建项目
-
+
search.placeholder
搜索
-
+
expandAll
全部展开
-
+
reduceAll
全部收起
-
-
+
+
part.info.timetravel_hint
- 这是物料在 %timestamp% 之前的数据。<i>请注意,此功能是实验性的,信息可能不正确。</i>
+ 在 %timestamp% 之前,部件是这样显示的。 <i>请注意,这是试验性功能,信息可能不正确。</i>
-
+
standard.label
属性
-
+
infos.label
信息
-
+
new
-
+
history.label
历史
-
+
export.label
导出
-
+
import_export.label
导入/导出
-
+
mass_creation.label
- 批量创建
+ 大量创建
-
+
admin.common
- 通用
+ 基本
-
+
admin.attachments
附件
-
+
admin.parameters
参数
-
+
export_all.label
导出所有元素
-
+
mass_creation.help
- 每行将被解释为要创建的元素的名称。可以通过缩进创建嵌套结构。
+ 每一行将被解析为新建元素的名称。可以通过缩进创建嵌套元素。
-
-
+
+
edit.caption
- 编辑元素%name%
+ 编辑元素 "%name"
-
-
+
+
new.caption
- 新元素
+ 新建元素
-
+
footprint.labelp
封装
-
+
new
@@ -229,7 +235,7 @@
编辑封装
-
+
new
@@ -238,61 +244,79 @@
新建封装
-
+
+
+ group.edit.caption
+ 组
+
+
+
user.edit.permissions
权限
-
+
new
group.edit
- 编辑用户组
+ 编辑组
-
+
new
group.new
- 新建用户组
+ 新建组
-
+
+
+ label_profile.caption
+ 标签配置
+
+
+
label_profile.advanced
高级
-
+
label_profile.comment
- 备注
+ 注释
-
+
new
label_profile.edit
- 编辑标签模板
+ 编辑标签配置
-
+
new
label_profile.new
- 新建标签模板
+ 新建标签配置
-
+
+
+ manufacturer.caption
+ 制造商
+
+
+
new
@@ -301,7 +325,7 @@
编辑制造商
-
+
new
@@ -310,31 +334,43 @@
新建制造商
-
+
- storelocation.labelp
- 存储位置
+ measurement_unit.caption
+ 计量单位
-
+
+
+ part_custom_state.caption
+ 部件的自定义状态
+
+
+
+
+ storelocation.labelp
+ 储存位置
+
+
+
new
storelocation.edit
- 编辑储存位置
+ 编辑存储位置
-
+
new
storelocation.new
- 新建储存位置
+ 新建存储位置
-
+
new
@@ -343,7 +379,7 @@
编辑供应商
-
+
new
@@ -352,73 +388,82 @@
新建供应商
-
+
+
+ user.edit.caption
+ Users
+
+
+
user.edit.configuration
配置
-
+
user.edit.password
密码
-
+
user.edit.tfa.caption
- 双因素认证
+ 2FA身份验证
-
+
user.edit.tfa.google_active
- 身份验证器应用已激活
+ 身份验证器应用处于活动状态
-
+
tfa_backup.remaining_tokens
- 剩余备份代码数量
+ 剩余备份代码计数
-
+
tfa_backup.generation_date
备份代码的生成日期
-
+
user.edit.tfa.disabled
方法未启用
-
+
user.edit.tfa.u2f_keys_count
- 活跃的安全密钥
+ 主动安全密钥
-
+
user.edit.tfa.disable_tfa_title
- 确定要继续?
+ 确定继续?
-
+
user.edit.tfa.disable_tfa_message
- 这将<b>禁用用户所有活动的双因素认证方法</b>并删除<b>备份代码</b>!<br>用户将需要重新设置所有双因素认证方法并打印新的备份代码!<br><br><b>只有在绝对确定用户身份(寻求帮助)的情况下才执行此操作,否则账号可能被攻击者入侵!</b>
+ 这将禁用 <b>账号的所有活动2FA身份验证方法</b> 并删除 <b>备份代码</b>!
+<br>
+该账号将必须重新设置所有2FA身份验证方法并获取新的备份代码。 <br><br>
+<b>应在完全确定 申请者身份 时才执行此操作,否则该账号可能会受到攻击。</b>
-
+
user.edit.tfa.disable_tfa.btn
- 禁用所有双因素认证方法
+ 禁用所有2FA身份验证方法
-
+
new
@@ -427,7 +472,7 @@
编辑用户
-
+
new
@@ -436,1363 +481,1347 @@
新建用户
-
+
attachment.delete
删除
-
+
- attachment.external_only
- 仅外部
+ attachment.external
+ 外部
-
+
attachment.preview.alt
附件缩略图
-
+
- attachment.view_local
- 查看本地副本
+ attachment.view
+ 查看
-
+
attachment.file_not_found
- 未找到文件
+ 文件未找到
-
+
attachment.secure
私有附件
-
+
attachment.create
- 增加附件
+ 添加附件
-
+
part_lot.edit.delete.confirm
- 确定要删除此库存?此操作无法撤消!
+ 确认删除 该库存 ? 该操作不能被撤消
-
+
entity.delete.confirm_title
- 确定要删除%name%?
+ 确定删除 %name%?
-
+
entity.delete.message
- 此操作无法撤消!<br>子元素将向上移动</br>。
+ 该操作不能被撤销
+<br>
+子元素将向上移动。
-
+
entity.delete
- 删除元素
+ Delete element
-
+
new
-
+
edit.log_comment
- 更改备注
+ 更改评论
-
+
entity.delete.recursive
- 递归删除(所有子元素)
+ 递归删除(所有子元素)
-
+
entity.duplicate
- 复制此元素并新建
+ 重复元素
-
+
export.format
文件格式
-
+
export.level
详细程度
-
+
export.level.simple
简单
-
+
export.level.extended
扩展
-
+
export.level.full
- 完整
+ 完全
-
+
export.include_children
- 导出时包含子元素
+ 在导出中包含子元素
-
+
export.btn
导出
-
+
id.label
ID
-
+
createdAt
- 创建时间
+ 创建于
-
+
lastModified
- 最后修改时间
+ 上次修改
-
+
entity.info.parts_count
- 具有此元素的物料数量
+ 具有该元素的部件数量
-
+
specifications.property
参数
-
+
specifications.symbol
符号
-
+
specifications.value_min
- 最小
+ 最小.
-
+
specifications.value_typ
- 标称
+ 标称.
-
+
specifications.value_max
- 最大
+ 最大.
-
+
specifications.unit
单位
-
+
specifications.text
文本
-
+
specifications.group
- 用户组
+ Group
-
-
- specifications.eda_visibility.help
- 将此参数导出为EDA字段
-
-
-
+
specification.create
- 新参数
+ 新建参数
-
+
parameter.delete.confirm
- 确定要删除此参数?
+ 确实删除该参数?
-
+
attachment.list.title
附件列表
-
+
part_list.loading.caption
- 加载中
+ 加载中...
-
+
part_list.loading.message
- 这可能需要等待一些时间。如果此消息未消失请尝试重新加载页面。
+ 这可能需要一些时间。如果此消息没有消失,请尝试重新加载页面。
-
+
vendor.base.javascript_hint
- 请启用Javascript以使用所有功能!
+ 需要激活 Javascript 才能使用所有功能
-
+
sidebar.big.toggle
- 显示/隐藏侧边栏
+ 显示/隐藏 侧边栏
-
+
loading.caption
- 加载中:
+ 加载中:
-
+
loading.message
- 这可能需要等待一段时间。如果此消息长时间存在请尝试重新加载页面。
+ 这可能需要一段时间。如果此消息长时间存在,请尝试重新加载页面。
-
+
loading.bar
加载中...
-
+
back_to_top
返回页面顶部
-
+
permission.edit.permission
权限
-
+
permission.edit.value
- 值
+ 配置
-
+
permission.legend.title
状态说明
-
+
permission.legend.disallow
禁止
-
+
permission.legend.allow
- 已允许
+ 允许
-
+
permission.legend.inherit
- 从父级用户组继承
+ 继承
-
+
bool.true
- true
+ TRUE
-
+
bool.false
- false
+ FALSE
-
+
Yes
YES
-
+
No
NO
-
+
specifications.value
值
-
+
version.caption
版本
-
+
homepage.license
- 许可证信息
+ 许可信息
-
+
homepage.github.caption
项目页面
-
-
+
+
homepage.github.text
- 源代码、下载、错误报告、待办列表等可在 <a href="%href%"class="link-external"target="_blank">GitHub项目页面</a> 上找到
+ 源代码、下载、错误报告、待办事项列表等可以在 <a href="%href%" class="link-external" target="_blank">项目仓库</a> 上找到。
-
+
homepage.help.caption
帮助
-
+
homepage.help.text
- 帮助和技巧可在 Wiki 和 <a href="%href%"class="link-external"target="_blank">GitHub页面</a> 中找到
+ 帮助和提示可以在 <a href="%href%" class="link-external" target="_blank">文档</a>中找到。
-
+
homepage.forum.caption
论坛
-
+
new
homepage.last_activity
- 最近活跃事件
+ 最近的事件
-
+
label_generator.title
标签生成器
-
-
+
+
label_generator.common
- 通用
+ 基本
-
+
label_generator.advanced
高级
-
+
label_generator.profiles
- 模板
+ 标签配置
-
+
label_generator.selected_profile
- 当前选中的模板
+ 当前选择的配置
-
+
label_generator.edit_profile
- 编辑模板
+ 编辑配置
-
+
label_generator.load_profile
- 加载模板
+ 载入配置
-
+
label_generator.download
下载
-
+
label_generator.label_btn
生成标签
-
+
label_generator.label_empty
- 新的空白标签
+ 新建空标签
-
+
label_scanner.title
标签扫描器
-
+
label_scanner.no_cam_found.title
- 未找到网络摄像头
+ 未找到摄像头
-
+
label_scanner.no_cam_found.text
- 需要网络摄像头并授权。也可以在下方手动输入条码。
+ 您需要一个摄像头并授予权限。或在下面手动输入条形码。
-
+
label_scanner.source_select
选择源
-
-
+
+
log.list.title
系统日志
-
+
new
-
+
log.undo.confirm_title
- 确实要撤消更改/恢复到时间戳?
+ 确定撤消更改/恢复到时间戳?
-
+
new
-
+
log.undo.confirm_message
- 确定要撤消该更改/将元素重置到该时间戳?
+ 确定撤消给定的更改/将元素重置到给定的时间戳?
-
+
mail.footer.email_sent_by
- 此邮件由以下系统自动发送
+ 这封电子邮件是自动发送的,由
-
+
mail.footer.dont_reply
- 请勿回复此邮件。
+ 不要回复此电子邮件。
-
+
email.hi %name%
你好 %name%
-
+
email.pw_reset.message
- 重置密码请求。如果对此请求不知情,请忽略此邮件。
+ 有人请求重置您的密码。 如果此请求不是您提出的,请忽略此邮件。
-
+
email.pw_reset.button
- 点击重置密码
+ 单击此处重置密码
-
+
email.pw_reset.fallback
- 如果按钮不起作用,请访问<a href="%url%">%url%</a>并输入以下信息
+ 如果这对您不起作用,请转到 <a href="%url%">%url%</a> 并输入以下信息
-
+
email.pw_reset.username
用户名
-
+
email.pw_reset.token
- 令牌
+ Token
-
+
email.pw_reset.valid_unit %date%
- 重置令牌有效期至 <i>%date%</i> 。
+ 重置令牌将在 <i>%date%</i> 之前有效。
-
+
orderdetail.delete
- 删除
+ Delete
-
+
pricedetails.edit.min_qty
- 最小折扣数量
+ 最低折扣数量
-
+
pricedetails.edit.price
价格
-
+
pricedetails.edit.price_qty
数量
-
+
pricedetail.create
- 增加价格
+ 添加价格
-
+
part.edit.title
- 编辑物料
+ 编辑部件
-
+
part.edit.card_title
- 编辑物料
+ 编辑部件
-
-
- form.dirty_form.unsaved_changes.title
- 未保存的更改
-
-
-
-
- form.dirty_form.unsaved_changes.message
- 有未保存的更改,如果离开此页面更改将丢弃。确定要继续?
-
-
-
+
part.edit.tab.common
- 通用
+ 基础
-
+
part.edit.tab.manufacturer
制造商
-
+
part.edit.tab.advanced
高级
-
+
part.edit.tab.advanced.ipn.commonSectionHeader
- 不包含物料增量的建议
+ Sugestie bez zwiększenia części
-
+
part.edit.tab.advanced.ipn.partIncrementHeader
- 包含数字物料增量的建议
+ 包含部件数值增量的建议
-
+
part.edit.tab.advanced.ipn.prefix.description.current-increment
- 物料的当前IPN规范
+ 部件的当前IPN规格
-
+
part.edit.tab.advanced.ipn.prefix.description.increment
- 基于相同物料描述的下一个可能的IPN规范
+ 基于相同部件描述的下一个可能的IPN规格
-
+
part.edit.tab.advanced.ipn.prefix_empty.direct_category
- 直接类别的IPN前缀为空,请在类别%name%中指定
+ 直接类别的 IPN 前缀为空,请在类别“%name%”中指定。
-
+
part.edit.tab.advanced.ipn.prefix.direct_category
直接类别的IPN前缀
-
+
part.edit.tab.advanced.ipn.prefix.direct_category.increment
- 直接类别的IPN前缀和物料特定增量
+ 直接类别的IPN前缀和部件特定的增量
-
+
part.edit.tab.advanced.ipn.prefix.hierarchical.no_increment
- 具有父前缀层次结构的IPN前缀
+ 具有父级前缀层级类别顺序的IPN前缀
-
+
part.edit.tab.advanced.ipn.prefix.hierarchical.increment
- 具有父前缀层次结构和物料特定增量的IPN前缀
+ 具有父级前缀层级类别顺序和组件特定增量的IPN前缀
-
+
part.edit.tab.advanced.ipn.prefix.not_saved
- 请先创建物料并分配类别:利用现有的类别及其各自的IPN前缀,系统会自动为该物料建议IPN。
+ 请先创建组件并将其分配到类别:基于现有类别及其专属的IPN前缀,可以自动建议组件的IPN
-
+
part.edit.tab.part_lots
库存
-
+
part.edit.tab.attachments
附件
-
+
part.edit.tab.orderdetails
采购信息
-
+
part.edit.tab.specifications
参数
-
+
part.edit.tab.comment
- 备注
+ 注释
-
+
part.new.card_title
- 创建新物料
+ 创建新部件
-
+
part_lot.delete
删除
-
+
part_lot.create
增加库存
-
+
orderdetail.create
- 增加经销商
+ 添加经销商
-
+
pricedetails.edit.delete.confirm
- 确定要删除此价格?此操作无法撤消。
+ 确实删除此价格? 该操作不能被撤消
-
+
orderdetails.edit.delete.confirm
- 确定要删除此经销商信息?此操作无法撤消!
+ 确实要删除此经销商信息? 该操作不能被撤消
-
+
part.info.title
- 物料详细信息
+ 部件的详细信息
-
+
part.part_lots.label
库存
-
+
comment.label
- 备注
+ 注释
-
+
part.info.specifications
参数
-
+
attachment.labelp
附件
-
+
vendor.partinfo.shopping_infos
- 购物信息
+ 采购信息
-
+
vendor.partinfo.history
历史
-
+
tools.label
工具
-
+
extended_info.label
扩展信息
-
+
attachment.name
名称
-
+
attachment.attachment_type
附件类型
-
+
attachment.file_name
文件名
-
+
attachment.file_size
文件大小
-
+
attachment.preview
预览图片
-
+
- attachment.download_local
- 下载本地副本
+ attachment.download
+ 下载
-
+
new
-
+
user.creating_user
- 创建此物料的用户
+ 创建此部件的用户
-
+
Unknown
未知
-
+
new
-
+
accessDenied
- 访问被拒绝
+ 拒绝访问
-
+
new
-
+
user.last_editing_user
- 最后编辑此物料的用户
+ 最后编辑此部件的用户
-
+
part.isFavorite
- 收藏
+ Favorite
-
+
part.minOrderAmount
- 最小订购数量
+ 最低订购量
-
+
manufacturer.label
制造商
-
+
name.label
名称
-
+
new
-
+
part.back_to_info
- 返回信息页面
+ 返回当前版本
-
+
description.label
描述
-
+
category.label
类别
-
+
instock.label
在库
-
+
mininstock.label
- 最小库存量
+ 最低库存
-
+
footprint.label
封装
-
+
part.avg_price.label
平均价格
-
+
part.supplier.name
名称
-
+
part.supplier.partnr
- 物料编号
+ 合作伙伴.
-
+
part.order.minamount
- 最小数量
+ 最低数量
-
+
part.order.price
价格
-
+
part.order.single_price
单价
-
+
part_lots.description
描述
-
+
part_lots.storage_location
存储位置
-
+
part_lots.amount
数量
-
+
part_lots.location_unknown
存储位置未知
-
+
part_lots.instock_unknown
数量未知
-
+
part_lots.expiration_date
- 过期日期
+ 到期时间
-
+
part_lots.is_expired
- 已过期
+ 已到期
-
+
part_lots.need_refill
- 需要补货
+ 需要补充
-
+
part.info.prev_picture
上一张图片
-
+
part.info.next_picture
下一张图片
-
+
part.mass.tooltip
- 质量
+ 重量
-
+
part.needs_review.badge
- 需要检查
+ 需要审查
-
+
part.favorite.badge
收藏
-
+
part.obsolete.badge
- 已停产
+ 不再可用
-
+
parameters.extracted_from_description
从描述中自动提取
-
+
parameters.auto_extracted_from_comment
- 从备注中自动提取
+ 从注释中自动提取
-
+
part.edit.btn
- 编辑物料
+ 编辑部件
-
+
part.clone.btn
- 克隆物料
+ 克隆部件
-
+
part.create.btn
- 创建新物料
+ 新建部件
-
+
part.delete.confirm_title
- 确定要删除此物料?
+ 确定删除该部件?
-
+
part.delete.message
- 此物料及所有关联信息(如附件、价格信息等)将被删除。此操作无法撤消!
+ 此部件与它的任何相关信息(如附件、价格信息等)将被删除。 该操作不能被撤消
-
+
part.delete
- 删除物料
+ 删除部件
-
+
parts_list.all.title
- 所有物料
+ 所有部件
-
+
parts_list.category.title
- 属于类别的物料
+ 部件(根据类别)
-
+
parts_list.footprint.title
- 使用封装的物料
+ 部件(根据封装)
-
+
parts_list.manufacturer.title
- 属于制造商的物料
+ 部件(根据制造商)
-
+
parts_list.search.title
- 搜索物料
+ 搜索部件
-
+
parts_list.storelocation.title
- 位于存储位置的物料
+ 部件(根据存储位置)
-
+
parts_list.supplier.title
- 属于供应商的物料
+ 部件(根据供应商)
-
+
parts_list.tags.title
- 拥有标签的物料
+ 部件(根据标签)
-
+
entity.info.common.tab
- 通用
+ 基本
-
+
entity.info.statistics.tab
- 统计
+ 统计数据
-
+
entity.info.attachments.tab
附件
-
+
entity.info.parameters.tab
参数
-
+
entity.info.name
名称
-
+
entity.info.parent
- 父级
+ 父元素
-
+
entity.edit.btn
编辑
-
+
entity.info.children_count
- 子元素数量
+ 子元素计数
-
+
tfa.check.title
- 需要双因素认证
+ 需要2FA身份验证
-
+
tfa.code.trusted_pc
- 这是一台受信任的计算机(如果启用,将不会在此计算机上执行进一步的双因素查询)
+ 这是受信任的计算机(如果启用此功能,则不会在此计算机上执行进一步的2FA查询)
-
+
login.btn
登录
-
+
user.logout
- 登出
+ 注销
-
+
tfa.check.code.label
身份验证器应用代码
-
+
tfa.check.code.help
- 输入身份验证器应用中的6位代码,或如果身份验证器不可用,输入备份代码。
+ 输入身份验证器应用中的6位代码,如果身份验证器不可用,请输入备用代码之一。
-
+
login.title
登录
-
+
login.card_title
登录
-
+
login.username.label
用户名
-
+
login.username.placeholder
用户名
-
+
login.password.label
密码
-
+
login.password.placeholder
密码
-
+
login.rememberme
- 保持登录(不应在共享计算机上使用)
+ 记住我(不应在公共计算机上使用)
-
+
pw_reset.password_forget
- 忘记用户名/密码?
+ 忘记用户名/密码?
-
+
pw_reset.new_pw.header.title
设置新密码
-
+
pw_reset.request.header.title
- 请求新密码
+ 要求新的密码
-
+
tfa_u2f.http_warning
- 正在使用不安全的HTTP方法访问此页面,因此U2F很可能无法工作(错误的请求错误消息)。如果要使用安全密钥,请让管理员设置HTTPS方法。
+ 您正在使用不安全的 HTTP 方法访问此页面,因此 U2F 很可能无法工作(错误请求错误消息)。 如果您想使用安全密钥,请要求管理员设置安全 HTTPS 方法。
-
+
r_u2f_two_factor.pressbutton
- 请插入安全密钥并按下按钮!
+ 请插入您的安全密钥并按下其按钮
-
+
tfa_u2f.add_key.title
- 增加安全密钥
+ 添加安全密钥
-
+
tfa_u2f.explanation
- 借助U2F/FIDO兼容的安全密钥(例如YubiKey/NitroKey),可以实现用户友好且安全的双因素认证。安全密钥可在此注册,当需要双因素验证时,只需通过USB插入密钥或通过NFC将其靠近设备即可。
+ 借助 U2F/FIDO 兼容的安全密钥(例如 YubiKey 或 NitroKey),可以实现用户友好且安全的2FA身份验证。 可以在此处注册安全密钥,如果需要两步验证,只需通过 USB 插入密钥或通过 NFC 在设备上输入密钥即可。
-
+
tfa_u2f.add_key.backup_hint
- 为确保在密钥丢失时仍能访问,建议注册第二个密钥作为备份并妥善保管!
+ 为了确保即使密钥丢失也能访问,建议注册第二个密钥作为备份并将其存放在安全的地方!
-
+
tfa_u2f.add_key.add_button
- 增加安全密钥
+ 添加安全密钥
-
+
tfa_u2f.add_key.back_to_settings
返回设置
-
+
new
statistics.title
- 统计
+ 统计数据
-
+