- Sprache je Benutzer (users.locale), Middleware SetLocale, Auswahl unter Einstellungen → Darstellung; angebotene Sprachen in config/app.php - Übersetzungen über Laravel Lang (lang/de.json, lang/de/*.php), Seitentitel aus #[Title] werden übersetzt - Eigene Texte und Korrekturen in lang/project/de.json, übernommen mit `artisan lang:apply-project` (überstehen `lang:update`) - Tests: jede im Code verwendete Übersetzung ist vorhanden, eigene Übersetzungen sind übernommen, Sprachwahl und Standardsprache; SecurityTest prüft Texte sprachunabhängig über __() - lang/ von Pint ausgenommen (erzeugte Dateien) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
42 lines
1.5 KiB
PHP
42 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Filesystem\Filesystem;
|
|
|
|
/**
|
|
* Überträgt die eigenen Übersetzungen aus lang/project/{locale}.json in lang/{locale}.json.
|
|
*
|
|
* lang/{locale}.json wird von Laravel Lang erzeugt; `lang:update` setzt dabei geänderte Paket-Texte
|
|
* zurück. Eigene Texte und Korrekturen stehen deshalb in lang/project/ und haben Vorrang.
|
|
*/
|
|
class ApplyProjectTranslations extends Command
|
|
{
|
|
protected $signature = 'lang:apply-project';
|
|
|
|
protected $description = 'Eigene Übersetzungen aus lang/project/ in lang/{locale}.json übernehmen';
|
|
|
|
public function handle(Filesystem $files): int
|
|
{
|
|
foreach ($files->glob(lang_path('project/*.json')) as $projectFile) {
|
|
$locale = pathinfo($projectFile, PATHINFO_FILENAME);
|
|
$target = lang_path("{$locale}.json");
|
|
|
|
$translations = $files->exists($target)
|
|
? json_decode($files->get($target), true, flags: JSON_THROW_ON_ERROR)
|
|
: [];
|
|
$project = json_decode($files->get($projectFile), true, flags: JSON_THROW_ON_ERROR);
|
|
|
|
$files->put($target, json_encode(
|
|
array_merge($translations, $project),
|
|
JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_THROW_ON_ERROR,
|
|
).PHP_EOL);
|
|
|
|
$this->components->info(count($project)." Übersetzungen nach lang/{$locale}.json übernommen.");
|
|
}
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|