b2in/database/seeders/BrandTranslationsSeeder.php
Kevin Adametz 8ddc85422e Englische Fassung der Markenseiten: Merkmale, Leistungen, Abschnitte, Showroom, Bildunterschriften
Diese Markenfelder waren nur einsprachig gespeichert und erschienen auf der englischen Seite
deutsch. Neue Spalte cms_brands.field_translations (additiv) trägt die Übersetzungen je Sprache,
die bisherigen Spalten bleiben die deutsche Fassung; ohne Übersetzung gilt weiter Deutsch.
Marken-Editor bearbeitet die Felder über den DE/EN-Umschalter (Bilder und Rubriken bleiben
sprachübergreifend). BrandTranslationsSeeder spielt die englischen Texte der vier Kernmarken
ein, ohne gepflegte Übersetzungen zu überschreiben. php artisan cms:untranslated listet
Inhalte, die in einer Sprache noch fehlen oder deutsch sind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 10:08:03 +00:00

61 lines
2.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace Database\Seeders;
use App\Models\CmsBrand;
use Illuminate\Database\Seeder;
/**
* Englische Fassung der Markenfelder, die bisher nur deutsch existierten (09.10.2026): Merkmale,
* Leistungen, Abschnitte, Showroom und Bildunterschriften der vier Kernmarken. Die Texte liegen in
* `database/seeders/data/brand-translations-en.json`, nach Slug.
*
* Gesetzt wird nur, was in `field_translations.en` noch fehlt – eine im Admin gepflegte Übersetzung
* bleibt. Bildunterschriften je Bild, nur für Bilder, die in der Galerie stehen. Mehrfaches
* Ausführen ist unbedenklich.
*
* php artisan db:seed --class=BrandTranslationsSeeder
*/
class BrandTranslationsSeeder extends Seeder
{
public const LOCALE = 'en';
public function run(): void
{
/** @var array<string, array<string, mixed>> $data */
$data = json_decode((string) file_get_contents(__DIR__.'/data/brand-translations-en.json'), true, flags: JSON_THROW_ON_ERROR);
$updated = [];
foreach ($data as $slug => $fields) {
$brand = CmsBrand::query()->where('slug', $slug)->first();
if (! $brand) {
continue;
}
$existing = $brand->field_translations[self::LOCALE] ?? [];
foreach ($fields as $field => $value) {
if ($field === 'gallery_captions') {
$value = array_merge(
array_intersect_key((array) $value, $brand->localized('gallery_captions', CmsBrand::BASE_LOCALE)),
array_filter((array) ($existing['gallery_captions'] ?? [])),
);
} elseif (filled($existing[$field] ?? null)) {
continue;
}
$brand->setLocalized($field, self::LOCALE, $value);
}
if ($brand->isDirty('field_translations')) {
$brand->save();
$updated[] = $slug;
}
}
$this->command?->info($updated === []
? 'Marken-Übersetzungen: nichts zu tun.'
: 'Marken-Übersetzungen (en) ergänzt: '.implode(', ', $updated).'.');
}
}