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 = () => {
+