Feature: Localization Restructuring to follow a stricter pattern
This commit is contained in:
@@ -50,7 +50,7 @@ fine — just keep admin/Livewire/webhook routes registered outside of it (as th
|
|||||||
|
|
||||||
## Behavior
|
## Behavior
|
||||||
|
|
||||||
`Modules\Core\Localization\LocaleMiddleware`:
|
`Modules\Core\Localization\Middleware\LocaleMiddleware`:
|
||||||
|
|
||||||
1. Reads the first path segment (`request()->segment(1)`).
|
1. Reads the first path segment (`request()->segment(1)`).
|
||||||
2. Matches it against `Lunar\Models\Language::code`.
|
2. Matches it against `Lunar\Models\Language::code`.
|
||||||
@@ -68,7 +68,7 @@ and invalidated automatically. Adding, editing, or removing a language via the F
|
|||||||
|
|
||||||
### How invalidation is wired (event-driven, not the observer itself)
|
### How invalidation is wired (event-driven, not the observer itself)
|
||||||
|
|
||||||
`Modules\Core\Localization\LanguageCacheObserver` observes `Lunar\Models\Language`'s
|
`Modules\Core\Localization\Observers\LanguageCacheObserver` observes `Lunar\Models\Language`'s
|
||||||
`created`/`updated`/`deleted` Eloquent events, but it's a thin trigger only — it doesn't do any
|
`created`/`updated`/`deleted` Eloquent events, but it's a thin trigger only — it doesn't do any
|
||||||
invalidation work itself. It dispatches one of three events from
|
invalidation work itself. It dispatches one of three events from
|
||||||
`Modules\Core\Localization\Events` (`LanguageCreated`, `LanguageUpdated` — carrying the old
|
`Modules\Core\Localization\Events` (`LanguageCreated`, `LanguageUpdated` — carrying the old
|
||||||
@@ -195,13 +195,13 @@ a third language automatically adds a third input, no resource changes needed.
|
|||||||
|
|
||||||
### `TranslationService` — writes go through here, not the model directly
|
### `TranslationService` — writes go through here, not the model directly
|
||||||
|
|
||||||
`Modules\Core\Localization\TranslationService` wraps create/update/delete on `LanguageLine` and
|
`Modules\Core\Localization\Services\TranslationService` wraps create/update/delete on `LanguageLine` and
|
||||||
dispatches a domain event after each write, following this project's standard event-driven
|
dispatches a domain event after each write, following this project's standard event-driven
|
||||||
pattern (see `modules.md`'s "Splitting Service Providers" / event-listener convention —
|
pattern (see `modules.md`'s "Splitting Service Providers" / event-listener convention —
|
||||||
the same shape as `Modules\Core\Auth\Events\UserCreated`):
|
the same shape as `Modules\Core\Auth\Events\UserCreated`):
|
||||||
|
|
||||||
```php
|
```php
|
||||||
use Modules\Core\Localization\TranslationService;
|
use Modules\Core\Localization\Services\TranslationService;
|
||||||
|
|
||||||
app(TranslationService::class)->create('storefront', 'nav.wishlist', [
|
app(TranslationService::class)->create('storefront', 'nav.wishlist', [
|
||||||
'en' => 'Wishlist',
|
'en' => 'Wishlist',
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ Returns an `Illuminate\Database\Eloquent\Collection` of `Lunar\Models\Product`
|
|||||||
(`variants`, `brand`, `media`, etc.) are available on the results as normal.
|
(`variants`, `brand`, `media`, etc.) are available on the results as normal.
|
||||||
|
|
||||||
`$locale` defaults to `App::getLocale()` — already set correctly on every storefront request by
|
`$locale` defaults to `App::getLocale()` — already set correctly on every storefront request by
|
||||||
`Modules\Core\Localization\LocaleMiddleware` (see `localization.md`), so callers in controllers
|
`Modules\Core\Localization\Middleware\LocaleMiddleware` (see `localization.md`), so callers in controllers
|
||||||
don't need to pass it explicitly.
|
don't need to pass it explicitly.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@ namespace Modules\Core\Localization\Filament\Resources\LanguageLineResource\Page
|
|||||||
use Filament\Resources\Pages\CreateRecord;
|
use Filament\Resources\Pages\CreateRecord;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Core\Localization\Filament\Resources\LanguageLineResource;
|
use Modules\Core\Localization\Filament\Resources\LanguageLineResource;
|
||||||
use Modules\Core\Localization\TranslationService;
|
use Modules\Core\Localization\Services\TranslationService;
|
||||||
|
|
||||||
class CreateLanguageLine extends CreateRecord
|
class CreateLanguageLine extends CreateRecord
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ use Filament\Actions\Action;
|
|||||||
use Filament\Resources\Pages\EditRecord;
|
use Filament\Resources\Pages\EditRecord;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Modules\Core\Localization\Filament\Resources\LanguageLineResource;
|
use Modules\Core\Localization\Filament\Resources\LanguageLineResource;
|
||||||
use Modules\Core\Localization\TranslationService;
|
use Modules\Core\Localization\Services\TranslationService;
|
||||||
use Spatie\TranslationLoader\LanguageLine;
|
use Spatie\TranslationLoader\LanguageLine;
|
||||||
|
|
||||||
class EditLanguageLine extends EditRecord
|
class EditLanguageLine extends EditRecord
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Localization;
|
namespace Modules\Core\Localization\Middleware;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Localization;
|
namespace Modules\Core\Localization\Observers;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Event;
|
use Illuminate\Support\Facades\Event;
|
||||||
use Lunar\Models\Language;
|
use Lunar\Models\Language;
|
||||||
@@ -8,7 +8,7 @@ use Lunar\Models\Language;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Cached read layer over Lunar's `languages` table — the single source both
|
* Cached read layer over Lunar's `languages` table — the single source both
|
||||||
* Modules\Core\Localization\LocaleMiddleware (request-time locale resolution) and
|
* Modules\Core\Localization\Middleware\LocaleMiddleware (request-time locale resolution) and
|
||||||
* any other locale-aware code (e.g. Modules\Core\Product\Services\ProductService) read
|
* any other locale-aware code (e.g. Modules\Core\Product\Services\ProductService) read
|
||||||
* from, so the language list is fetched once per cache lifetime rather than once
|
* from, so the language list is fetched once per cache lifetime rather than once
|
||||||
* per caller. Cached forever, invalidated via forget() by
|
* per caller. Cached forever, invalidated via forget() by
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Localization;
|
namespace Modules\Core\Localization\Services;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\App;
|
use Illuminate\Support\Facades\App;
|
||||||
use Spatie\TranslationLoader\LanguageLine;
|
use Spatie\TranslationLoader\LanguageLine;
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
namespace Modules\Core\Localization;
|
namespace Modules\Core\Localization\Services;
|
||||||
|
|
||||||
use Illuminate\Support\Facades\Event;
|
use Illuminate\Support\Facades\Event;
|
||||||
use Modules\Core\Localization\Events\TranslationCreated;
|
use Modules\Core\Localization\Events\TranslationCreated;
|
||||||
@@ -11,12 +11,12 @@ use Modules\Core\Localization\Events\LanguageUpdated;
|
|||||||
use Modules\Core\Localization\Events\TranslationCreated;
|
use Modules\Core\Localization\Events\TranslationCreated;
|
||||||
use Modules\Core\Localization\Events\TranslationDeleted;
|
use Modules\Core\Localization\Events\TranslationDeleted;
|
||||||
use Modules\Core\Localization\Events\TranslationUpdated;
|
use Modules\Core\Localization\Events\TranslationUpdated;
|
||||||
use Modules\Core\Localization\LanguageCacheObserver;
|
|
||||||
use Modules\Core\Localization\Listeners\FlushLanguageCache;
|
use Modules\Core\Localization\Listeners\FlushLanguageCache;
|
||||||
use Modules\Core\Localization\Listeners\FlushTranslationCache;
|
use Modules\Core\Localization\Listeners\FlushTranslationCache;
|
||||||
use Modules\Core\Localization\Listeners\LogTranslationActivity;
|
use Modules\Core\Localization\Listeners\LogTranslationActivity;
|
||||||
use Modules\Core\Localization\Listeners\MigrateTranslationsForRenamedLanguage;
|
use Modules\Core\Localization\Listeners\MigrateTranslationsForRenamedLanguage;
|
||||||
use Modules\Core\Localization\LocaleMiddleware;
|
use Modules\Core\Localization\Middleware\LocaleMiddleware;
|
||||||
|
use Modules\Core\Localization\Observers\LanguageCacheObserver;
|
||||||
|
|
||||||
class LocalizationServiceProvider extends ServiceProvider
|
class LocalizationServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user