Replace type synonym placeholders with bracket notation for better DX (#1133)
Some checks are pending
Build assets artifact / Build assets artifact (push) Waiting to run
Docker Image Build / docker (push) Waiting to run
Docker Image Build (FrankenPHP) / docker (push) Waiting to run
Static analysis / Static analysis (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, mysql) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, postgres) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.2, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.3, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.4, sqlite) (push) Waiting to run
PHPUnit Tests / PHPUnit and coverage Test (PHP 8.5, sqlite) (push) Waiting to run

* Initial plan

* Replace placeholder syntax for type synonyms to be more DX friendly

Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>

* Update translation files to use new placeholder syntax

Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>

* Use mb_strtoupper with mb_substr for Unicode consistency

Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>

* Make placeholder generation right

* Removed obsolete transltions

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: jbtronics <5410681+jbtronics@users.noreply.github.com>
Co-authored-by: Jan Böhmer <mail@jan-boehmer.de>
This commit is contained in:
Copilot 2025-12-06 23:29:32 +01:00 committed by GitHub
parent 443cb57ce8
commit a356eecd74
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 19 additions and 30 deletions

View file

@ -18,7 +18,7 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co
parts: # e.g. this maps to perms_parts in User/Group database parts: # e.g. this maps to perms_parts in User/Group database
group: "data" group: "data"
label: "{{part}}" label: "[[Part]]"
operations: # Here are all possible operations are listed => the op name is mapped to bit value operations: # Here are all possible operations are listed => the op name is mapped to bit value
read: read:
label: "perm.read" label: "perm.read"
@ -71,7 +71,7 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co
storelocations: &PART_CONTAINING storelocations: &PART_CONTAINING
label: "{{storage_location}}" label: "[[Storage_location]]"
group: "data" group: "data"
operations: operations:
read: read:
@ -103,39 +103,39 @@ perms: # Here comes a list with all Permission names (they have a perm_[name] co
footprints: footprints:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{footprint}}" label: "[[Footprint]]"
categories: categories:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{category}}" label: "[[Category]]"
suppliers: suppliers:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{supplier}}" label: "[[Supplier]]"
manufacturers: manufacturers:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{manufacturer}}" label: "[[Manufacturer]]"
projects: projects:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{project}}" label: "[[Project]]"
attachment_types: attachment_types:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{attachment_type}}" label: "[[Attachment_type]]"
currencies: currencies:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{currency}}" label: "[[Currency]]"
measurement_units: measurement_units:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{measurement_unit}}" label: "[[Measurement_unit]]"
part_custom_states: part_custom_states:
<<: *PART_CONTAINING <<: *PART_CONTAINING
label: "{{part_custom_state}}" label: "[[Part_custom_state]]"
tools: tools:
label: "perm.part.tools" label: "perm.part.tools"

View file

@ -60,10 +60,10 @@ readonly class RegisterSynonymsAsTranslationParametersListener
//Generate a placeholder for each element type //Generate a placeholder for each element type
foreach (ElementTypes::cases() as $elementType) { foreach (ElementTypes::cases() as $elementType) {
//We have a placeholder for singular //Versions with capitalized first letter
$placeholders['{' . $elementType->value . '}'] = $this->typeNameGenerator->typeLabel($elementType); $capitalized = ucfirst($elementType->value); //We have only ASCII element type values, so this is sufficient
//We have a placeholder for plural $placeholders['[' . $capitalized . ']'] = $this->typeNameGenerator->typeLabel($elementType);
$placeholders['{{' . $elementType->value . '}}'] = $this->typeNameGenerator->typeLabelPlural($elementType); $placeholders['[[' . $capitalized . ']]'] = $this->typeNameGenerator->typeLabelPlural($elementType);
//And we have lowercase versions for both //And we have lowercase versions for both
$placeholders['[' . $elementType->value . ']'] = mb_strtolower($this->typeNameGenerator->typeLabel($elementType)); $placeholders['[' . $elementType->value . ']'] = mb_strtolower($this->typeNameGenerator->typeLabel($elementType));

View file

@ -40,10 +40,11 @@ class RegisterSynonymsAsTranslationParametersTest extends KernelTestCase
$placeholders = $this->listener->getSynonymPlaceholders(); $placeholders = $this->listener->getSynonymPlaceholders();
$this->assertIsArray($placeholders); $this->assertIsArray($placeholders);
$this->assertSame('Part', $placeholders['{part}']); // Curly braces for lowercase versions
$this->assertSame('Parts', $placeholders['{{part}}']);
//Lowercase versions:
$this->assertSame('part', $placeholders['[part]']); $this->assertSame('part', $placeholders['[part]']);
$this->assertSame('parts', $placeholders['[[part]]']); $this->assertSame('parts', $placeholders['[[part]]']);
// Square brackets for capitalized versions (with capital first letter in placeholder)
$this->assertSame('Part', $placeholders['[Part]']);
$this->assertSame('Parts', $placeholders['[[Part]]']);
} }
} }

View file

@ -14297,12 +14297,6 @@ Bitte beachten Sie, dass dieses System derzeit experimentell ist und die hier de
<target>Mit Typsynonymen können Sie die Bezeichnungen von integrierten Datentypen ersetzen. Zum Beispiel können Sie „Footprint" in etwas anderes umbenennen.</target> <target>Mit Typsynonymen können Sie die Bezeichnungen von integrierten Datentypen ersetzen. Zum Beispiel können Sie „Footprint" in etwas anderes umbenennen.</target>
</segment> </segment>
</unit> </unit>
<unit id="GSqBiVV" name="{{part}}">
<segment>
<source>{{part}}</source>
<target>Bauteile</target>
</segment>
</unit>
<unit id="wjcsjzT" name="log.element_edited.changed_fields.part_ipn_prefix"> <unit id="wjcsjzT" name="log.element_edited.changed_fields.part_ipn_prefix">
<segment> <segment>
<source>log.element_edited.changed_fields.part_ipn_prefix</source> <source>log.element_edited.changed_fields.part_ipn_prefix</source>

View file

@ -14146,12 +14146,6 @@ Please note that this system is currently experimental, and the synonyms defined
<target>Type synonyms allow you to replace the labels of built-in data types. For example, you can rename "Footprint" to something else.</target> <target>Type synonyms allow you to replace the labels of built-in data types. For example, you can rename "Footprint" to something else.</target>
</segment> </segment>
</unit> </unit>
<unit id="GSqBiVV" name="{{part}}">
<segment>
<source>{{part}}</source>
<target>Parts</target>
</segment>
</unit>
<unit id="wjcsjzT" name="log.element_edited.changed_fields.part_ipn_prefix"> <unit id="wjcsjzT" name="log.element_edited.changed_fields.part_ipn_prefix">
<segment> <segment>
<source>log.element_edited.changed_fields.part_ipn_prefix</source> <source>log.element_edited.changed_fields.part_ipn_prefix</source>