diff --git a/app/Models/Category.php b/app/Models/Category.php
index 5f2e582c..865247a7 100644
--- a/app/Models/Category.php
+++ b/app/Models/Category.php
@@ -46,6 +46,16 @@ class Category extends Model
return $this->hasMany(CategoryTranslation::class);
}
+ /**
+ * Name aus der bereits (locale-gefiltert) geladenen Übersetzung, mit
+ * `#id`-Fallback, falls keine Übersetzung vorliegt. Erwartet eine
+ * eager-geladene `translations`-Relation der gewünschten Sprache.
+ */
+ public function localizedName(): string
+ {
+ return $this->translations->first()?->name ?? '#'.$this->id;
+ }
+
public function pressReleases(): HasMany
{
return $this->hasMany(PressRelease::class);
diff --git a/resources/views/livewire/admin/categories/create.blade.php b/resources/views/livewire/admin/categories/create.blade.php
index e2e5bf05..eb7e954a 100644
--- a/resources/views/livewire/admin/categories/create.blade.php
+++ b/resources/views/livewire/admin/categories/create.blade.php
@@ -219,7 +219,7 @@ new #[Layout('components.layouts.app'), Title('Kategorie anlegen')] class extend
@foreach ($parentOptions as $parent)
@endforeach
diff --git a/resources/views/livewire/admin/categories/edit.blade.php b/resources/views/livewire/admin/categories/edit.blade.php
index 3f662642..69392dbe 100644
--- a/resources/views/livewire/admin/categories/edit.blade.php
+++ b/resources/views/livewire/admin/categories/edit.blade.php
@@ -270,7 +270,7 @@ new #[Layout('components.layouts.app'), Title('Kategorie bearbeiten')] class ext
@foreach ($parentOptions as $parent)
@endforeach
diff --git a/resources/views/livewire/admin/footer-codes/create.blade.php b/resources/views/livewire/admin/footer-codes/create.blade.php
index a319a62e..70b438a4 100644
--- a/resources/views/livewire/admin/footer-codes/create.blade.php
+++ b/resources/views/livewire/admin/footer-codes/create.blade.php
@@ -68,7 +68,7 @@ new #[Layout('components.layouts.app'), Title('Footer-Code anlegen')] class exte
->get()
->map(fn (Category $cat) => [
'id' => $cat->id,
- 'name' => $cat->translations->first()?->name ?? '#'.$cat->id,
+ 'name' => $cat->localizedName(),
'portal' => $cat->portal->value,
]),
];
diff --git a/resources/views/livewire/admin/footer-codes/edit.blade.php b/resources/views/livewire/admin/footer-codes/edit.blade.php
index c470a588..bdc2a837 100644
--- a/resources/views/livewire/admin/footer-codes/edit.blade.php
+++ b/resources/views/livewire/admin/footer-codes/edit.blade.php
@@ -99,7 +99,7 @@ new #[Layout('components.layouts.app'), Title('Footer-Code bearbeiten')] class e
->get()
->map(fn (Category $cat) => [
'id' => $cat->id,
- 'name' => $cat->translations->first()?->name ?? '#'.$cat->id,
+ 'name' => $cat->localizedName(),
'portal' => $cat->portal->value,
]),
];
diff --git a/tests/Feature/CategoryLocalizedNameTest.php b/tests/Feature/CategoryLocalizedNameTest.php
new file mode 100644
index 00000000..fa5b3c72
--- /dev/null
+++ b/tests/Feature/CategoryLocalizedNameTest.php
@@ -0,0 +1,18 @@
+withTranslations()->create();
+ $category->load(['translations' => fn ($query) => $query->where('locale', 'de')]);
+
+ $expected = $category->translations->first()->name;
+
+ expect($category->localizedName())->toBe($expected);
+});
+
+test('localizedName falls back to the id when no translation is loaded', function () {
+ $category = Category::factory()->create();
+
+ expect($category->localizedName())->toBe('#'.$category->id);
+});