ldc-showroom-bo/app/Providers/TranslationServiceProvider.php

96 lines
3 KiB
PHP
Raw Permalink Normal View History

2024-01-05 11:28:16 +01:00
<?php
namespace App\Providers;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\ServiceProvider;
use Symfony\Component\Finder\SplFileInfo;
2025-05-28 17:20:29 +02:00
use App\Lib\Helpers\ToolboxHelper;
2024-01-05 11:28:16 +01:00
class TranslationServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot(): void
{
foreach ($this->collectLocalesStrings() as $locale) {
// * Suported locales
Cache::rememberForever(sprintf('translations.%s', $locale), function () use ($locale) {
2024-01-17 12:24:34 +01:00
$phpTransFallback = $this->phpTranslations(config('app.fallback_locale'));
$phpTransLocale = $this->phpTranslations($locale);
$jsonTransFallback = $this->jsonTranslations(config('app.fallback_locale'));
$jsonTransLocale = $this->jsonTranslations($locale);
$translations = [
'php' => ToolboxHelper::arrayMergeRecursiveDistinct(
2024-01-17 12:24:34 +01:00
$phpTransLocale,
$phpTransFallback,
),
'json' => ToolboxHelper::arrayMergeRecursiveDistinct(
2024-01-17 12:24:34 +01:00
$jsonTransLocale,
$jsonTransFallback,
),
2024-01-05 11:28:16 +01:00
];
return $translations;
});
}
}
/**
* Gather provided langs checking from files
*
* @return \Illuminate\Support\Collection<string, string>
*/
private function collectLocalesStrings(): Collection
{
2024-01-30 11:51:13 +01:00
// * En dur dans ->keys array<int,string>.
// @phpstan-ignore-next-line
2024-01-05 11:28:16 +01:00
return collect(File::allFiles(resource_path('lang/')))->flatMap(function (SplFileInfo $file) {
if ($file->getRelativePath() and \strpos($file->getRelativePath(), 'vendor') !== 0) {
return [$file->getRelativePath() => ''];
}
2024-01-17 12:24:34 +01:00
})->keys()->merge(config('app.locales', []));
2024-01-05 11:28:16 +01:00
}
/**
* Gather all php translations
*
* @param string $locale
* @return array<string, string>
*/
private function phpTranslations(string $locale): array
{
$path = resource_path("lang/$locale");
2024-01-17 12:24:34 +01:00
if (!File::exists($path) or !File::isReadable($path)) {
return [];
}
2024-01-05 11:28:16 +01:00
return collect(File::allFiles($path))->flatMap(function ($file) use ($locale) {
$translation = $file->getBasename('.php');
return [$translation => trans($translation, [], $locale)];
})->all();
}
/**
* Gather json translations
*
* @param string $locale
* @return array<string, string>
*/
private function jsonTranslations(string $locale): array
{
$path = resource_path("lang/$locale.json");
2024-01-17 12:24:34 +01:00
if (!File::exists($path) or !File::isReadable($path)) {
return [];
2024-01-05 11:28:16 +01:00
}
2024-01-17 12:24:34 +01:00
return json_decode(File::get($path), true) ?? [];
2024-01-05 11:28:16 +01:00
}
}