<?php
namespace App\Providers;
use Carbon\Carbon;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\ServiceProvider;
class TranslationServiceProvider extends ServiceProvider
{
public function boot()
{
try {
Cache::forget('translations');
if (DB::connection()->getDatabaseName() != '') {
if (Schema::hasTable('languages')) {
Cache::put('translations', $this->getTranslations());
}
}
} catch (\Exception $exception) {
}
}
private function getTranslations()
{
$translations = collect();
try {
$ln = DB::table('languages')->where('status', 1)->pluck('code')->toArray();
foreach ($ln as $locale) {
$translations[$locale] = [
'php' => $this->phpTranslations($locale),
'json' => $this->jsonTranslations($locale),
];
}
} catch (\Exception $exception) {
}
return $translations;
}
private function phpTranslations($locale)
{
try {
$path = resource_path("lang/$locale");
return collect(File::allFiles($path))->flatMap(function ($file) use ($locale) {
$key = ($translation = $file->getBasename('.php'));
return [$key => trans($translation, [], $locale)];
});
} catch (\Exception $exception) {
$path = resource_path("lang/en");
return collect(File::allFiles($path))->flatMap(function ($file) use ($locale) {
$key = ($translation = $file->getBasename('.php'));
return [$key => trans($translation, [], $locale)];
});
}
}
private function jsonTranslations($locale)
{
$files = glob(resource_path('lang/' . $locale . '/*.php'));
$lang = [];
foreach ($files as $file) {
if (file_exists($file) && is_array(include($file))) {
$lang = array_merge($lang, include($file));
}
}
if (!json_encode($lang, true)) {
return json_encode($lang, JSON_INVALID_UTF8_IGNORE);
}
return json_encode($lang, true);
}
}