This commit is contained in:
parent
efc7e1c2a7
commit
dee9bbfbe7
@ -54,6 +54,13 @@ class LanguageController extends Controller
|
|||||||
return back()->with('success', "Language deleted successfully");
|
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)
|
public function edit_property(string $id)
|
||||||
{
|
{
|
||||||
$property = LanguageProperty::where('id', $id)->with(['language:id,code'])->firstOrFail();
|
$property = LanguageProperty::where('id', $id)->with(['language:id,code'])->firstOrFail();
|
||||||
|
|||||||
@ -29,22 +29,8 @@ class LanguageService extends MediaService
|
|||||||
$appLangPath = storage_path('app/lang/default');
|
$appLangPath = storage_path('app/lang/default');
|
||||||
|
|
||||||
|
|
||||||
$groups = [];
|
$language = Language::create($data);
|
||||||
foreach ($this->groupNames as $groupName) {
|
$this->syncLanguagePropertiesFromFiles($language);
|
||||||
$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,
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$alreadyExists = is_dir($langDir);
|
$alreadyExists = is_dir($langDir);
|
||||||
|
|
||||||
@ -59,6 +45,18 @@ class LanguageService extends MediaService
|
|||||||
Language::find($id)->update($data);
|
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
|
protected function loadLanguageGroup(string $locale, string $groupName): array
|
||||||
{
|
{
|
||||||
$defaultGroupPath = storage_path("app/lang/groups/{$groupName}.php");
|
$defaultGroupPath = storage_path("app/lang/groups/{$groupName}.php");
|
||||||
@ -118,6 +116,27 @@ class LanguageService extends MediaService
|
|||||||
return $groups;
|
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)
|
function defaultLanguage($id)
|
||||||
{
|
{
|
||||||
Language::where('is_default', true)->update(['is_default' => false]);
|
Language::where('is_default', true)->update(['is_default' => false]);
|
||||||
|
|||||||
@ -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::middleware(['installed', 'appConfig', 'auth', 'role:admin'])->prefix('dashboard/settings')->group(function () {
|
||||||
Route::resource('language', LanguageController::class)->except(['create']);
|
Route::resource('language', LanguageController::class)->except(['create']);
|
||||||
Route::post('language/default/{id}', [LanguageController::class, 'default'])->name('language.default');
|
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::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');
|
Route::put('/language/property/{property}', [LanguageController::class, 'update_property'])->name('language.property.update');
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { Card } from '@/components/ui/card';
|
|||||||
import Dashboard from '@/layouts/dashboard/layout';
|
import Dashboard from '@/layouts/dashboard/layout';
|
||||||
import { SharedData } from '@/types/global';
|
import { SharedData } from '@/types/global';
|
||||||
import { Head, Link, router, usePage } from '@inertiajs/react';
|
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 { ReactNode } from 'react';
|
||||||
import AddLanguage from './partials/add-language';
|
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 (
|
return (
|
||||||
<>
|
<>
|
||||||
<Head title={settings.language_settings} />
|
<Head title={settings.language_settings} />
|
||||||
@ -63,6 +69,9 @@ const Index = () => {
|
|||||||
<Pencil className="h-4 w-4" />
|
<Pencil className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
<Button size="icon" variant="secondary" className="mr-3 h-7 w-7 rounded-full text-blue-500" onClick={() => syncFromFiles(lang)}>
|
||||||
|
<RefreshCw className="h-4 w-4" />
|
||||||
|
</Button>
|
||||||
<Switch disabled checked name={lang.code} />
|
<Switch disabled checked name={lang.code} />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -84,6 +93,9 @@ const Index = () => {
|
|||||||
<Pencil className="h-4 w-4" />
|
<Pencil className="h-4 w-4" />
|
||||||
</Button>
|
</Button>
|
||||||
</Link>
|
</Link>
|
||||||
|
<Button size="icon" variant="secondary" className="h-7 w-7 rounded-full text-blue-500" onClick={() => syncFromFiles(lang)}>
|
||||||
|
<RefreshCw className="h-4 w-4" />
|
||||||
|
</Button>
|
||||||
|
|
||||||
<DeleteModal
|
<DeleteModal
|
||||||
routePath={route('language.destroy', lang.id)}
|
routePath={route('language.destroy', lang.id)}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user