fix(i18n): include namespace in cache key/query, clean up singleton, test isolation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>main
parent
ce9e53d206
commit
b121520ed6
|
|
@ -10,7 +10,8 @@ class DatabaseTranslationLoader implements Loader
|
|||
{
|
||||
public function load($locale, $group, $namespace = null): array
|
||||
{
|
||||
$cacheKey = "lang:{$locale}:{$group}";
|
||||
$ns = $namespace ?? '*';
|
||||
$cacheKey = "lang:{$ns}:{$locale}:{$group}";
|
||||
|
||||
$cached = Redis::hGetAll($cacheKey);
|
||||
if (! empty($cached)) {
|
||||
|
|
@ -19,6 +20,7 @@ class DatabaseTranslationLoader implements Loader
|
|||
|
||||
$translations = Translation::where('locale', $locale)
|
||||
->where('group', $group)
|
||||
->where('namespace', $namespace ?? '*')
|
||||
->pluck('value', 'key')
|
||||
->toArray();
|
||||
|
||||
|
|
@ -31,7 +33,6 @@ class DatabaseTranslationLoader implements Loader
|
|||
}
|
||||
|
||||
public function addNamespace($namespace, $hint): void {}
|
||||
public function addPath($path): void {}
|
||||
public function addJsonPath($path): void {}
|
||||
|
||||
public function namespaces(): array
|
||||
|
|
|
|||
|
|
@ -15,18 +15,17 @@ class AppServiceProvider extends ServiceProvider
|
|||
*/
|
||||
public function register(): void
|
||||
{
|
||||
$this->app->singleton('translation.loader', function ($app) {
|
||||
return new DatabaseTranslationLoader;
|
||||
});
|
||||
$this->app->singleton('translation.loader', fn() => new DatabaseTranslationLoader);
|
||||
|
||||
// TranslationServiceProvider is deferred and re-binds translation.loader
|
||||
// when it resolves. We extend 'translator' to swap in our DB loader after
|
||||
// the translator instance is created.
|
||||
$this->app->extend('translator', function ($translator, $app) {
|
||||
$loader = new DatabaseTranslationLoader;
|
||||
$reflection = new \ReflectionProperty($translator, 'loader');
|
||||
$reflection->setAccessible(true);
|
||||
$reflection->setValue($translator, $loader);
|
||||
// Keep the singleton up-to-date so app('translation.loader') returns ours.
|
||||
$app->instance('translation.loader', $loader);
|
||||
$prop = new \ReflectionProperty($translator, 'loader');
|
||||
$prop->setValue($translator, $loader);
|
||||
|
||||
return $translator;
|
||||
});
|
||||
|
|
|
|||
|
|
@ -5,10 +5,14 @@ use Illuminate\Support\Facades\App;
|
|||
use Illuminate\Support\Facades\Redis;
|
||||
|
||||
beforeEach(function () {
|
||||
Redis::del('lang:*:de:auth');
|
||||
Redis::del('lang:de:auth');
|
||||
app('translator')->setLoaded([]);
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
app('translator')->setLoaded([]);
|
||||
Redis::del('lang:*:de:auth');
|
||||
Redis::del('lang:de:auth');
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue