From dee9bbfbe77a1278cfc2fa8edceaf121b800465d Mon Sep 17 00:00:00 2001 From: Ahmed Darrazi Date: Wed, 17 Dec 2025 14:37:16 +0100 Subject: [PATCH] bugfixes --- .../Http/Controllers/LanguageController.php | 7 +++ .../Language/app/Services/LanguageService.php | 51 +++++++++++++------ Modules/Language/routes/web.php | 1 + .../dashboard/settings/translation/index.tsx | 14 ++++- 4 files changed, 56 insertions(+), 17 deletions(-) diff --git a/Modules/Language/app/Http/Controllers/LanguageController.php b/Modules/Language/app/Http/Controllers/LanguageController.php index efc1ad91..f46a618d 100644 --- a/Modules/Language/app/Http/Controllers/LanguageController.php +++ b/Modules/Language/app/Http/Controllers/LanguageController.php @@ -54,6 +54,13 @@ class LanguageController extends Controller return back()->with('success', "Language deleted successfully"); } + public function sync(string $local) + { + $this->languageService->syncLanguageFromFiles($local); + + return back()->with('success', "Language synced from files successfully"); + } + public function edit_property(string $id) { $property = LanguageProperty::where('id', $id)->with(['language:id,code'])->firstOrFail(); diff --git a/Modules/Language/app/Services/LanguageService.php b/Modules/Language/app/Services/LanguageService.php index 6c4ba93c..01ce42b7 100644 --- a/Modules/Language/app/Services/LanguageService.php +++ b/Modules/Language/app/Services/LanguageService.php @@ -29,22 +29,8 @@ class LanguageService extends MediaService $appLangPath = storage_path('app/lang/default'); - $groups = []; - foreach ($this->groupNames as $groupName) { - $groups[$groupName] = $this->loadLanguageGroup($data['code'], $groupName); - } - - $languages = Language::create($data); - - foreach ($groups as $key => $group) { - foreach ($group as $value) { - LanguageProperty::create([ - ...$value, - 'group' => $key, - 'language_id' => $languages->id, - ]); - } - } + $language = Language::create($data); + $this->syncLanguagePropertiesFromFiles($language); $alreadyExists = is_dir($langDir); @@ -59,6 +45,18 @@ class LanguageService extends MediaService Language::find($id)->update($data); } + public function syncLanguageFromFiles(string $locale): void + { + $language = Language::where('code', $locale)->first(); + + if (! $language) { + return; + } + + $this->syncLanguagePropertiesFromFiles($language); + $this->forgetLanguageCache($locale); + } + protected function loadLanguageGroup(string $locale, string $groupName): array { $defaultGroupPath = storage_path("app/lang/groups/{$groupName}.php"); @@ -118,6 +116,27 @@ class LanguageService extends MediaService return $groups; } + protected function syncLanguagePropertiesFromFiles(Language $language): void + { + foreach ($this->groupNames as $groupName) { + $groups = $this->loadLanguageGroup($language->code, $groupName); + + foreach ($groups as $group) { + LanguageProperty::updateOrCreate( + [ + 'language_id' => $language->id, + 'group' => $groupName, + 'slug' => $group['slug'], + ], + [ + 'name' => $group['name'], + 'properties' => $group['properties'], + ] + ); + } + } + } + function defaultLanguage($id) { Language::where('is_default', true)->update(['is_default' => false]); diff --git a/Modules/Language/routes/web.php b/Modules/Language/routes/web.php index 8bdcea67..aa3ab453 100644 --- a/Modules/Language/routes/web.php +++ b/Modules/Language/routes/web.php @@ -9,6 +9,7 @@ Route::post('change-direction', [LanguageController::class, 'change_direction']) Route::middleware(['installed', 'appConfig', 'auth', 'role:admin'])->prefix('dashboard/settings')->group(function () { Route::resource('language', LanguageController::class)->except(['create']); Route::post('language/default/{id}', [LanguageController::class, 'default'])->name('language.default'); + Route::post('language/{local}/sync', [LanguageController::class, 'sync'])->name('language.sync'); Route::get('/language/property/{property}', [LanguageController::class, 'edit_property'])->name('language.property.edit'); Route::put('/language/property/{property}', [LanguageController::class, 'update_property'])->name('language.property.update'); diff --git a/resources/js/pages/dashboard/settings/translation/index.tsx b/resources/js/pages/dashboard/settings/translation/index.tsx index 5de16548..5d483abc 100644 --- a/resources/js/pages/dashboard/settings/translation/index.tsx +++ b/resources/js/pages/dashboard/settings/translation/index.tsx @@ -5,7 +5,7 @@ import { Card } from '@/components/ui/card'; import Dashboard from '@/layouts/dashboard/layout'; import { SharedData } from '@/types/global'; import { Head, Link, router, usePage } from '@inertiajs/react'; -import { Pencil, Trash2 } from 'lucide-react'; +import { Pencil, RefreshCw, Trash2 } from 'lucide-react'; import { ReactNode } from 'react'; import AddLanguage from './partials/add-language'; @@ -30,6 +30,12 @@ const Index = () => { }); }; + const syncFromFiles = (lang: Language) => { + router.post(route('language.sync', lang.code), {}, { + preserveScroll: true, + }); + }; + return ( <> @@ -63,6 +69,9 @@ const Index = () => { + @@ -84,6 +93,9 @@ const Index = () => { +