forked from fa/breadcrumb-the-shire
feat: module-owned i18n with merge-at-boot translation loading
Each module can now ship its own i18n/ directory with translation files (default_de.json, default_en.json). At boot time, ModuleI18nLoader preloads core translations then merges module translations on top via Reflection into I18n::$strings — the t() helper stays unchanged. - Add i18nPath property to ModuleManifest - Add ModuleI18nLoader with Reflection-based preload - Extract 59 module-exclusive keys from core i18n into module files (notifications: 8, bookmarks: 41, addressbook: 10) - Expand TranslationKeysTest to scan modules/ and validate against merged core + module translations - Add ModuleI18nContractTest for per-module de/en parity and completeness Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -148,6 +148,12 @@ final class ModuleRegistry
|
||||
// module classes (MintyPHP\Module\<Name>\*) resolve without a custom loader.
|
||||
self::registerModuleAutoloading($manifests);
|
||||
|
||||
// Preload core + module translations into I18n before any t() call.
|
||||
$coreI18nDir = rtrim($modulesDir, '/') . '/../i18n';
|
||||
if (is_dir($coreI18nDir)) {
|
||||
ModuleI18nLoader::preload($manifests, $coreI18nDir);
|
||||
}
|
||||
|
||||
// Register and merge
|
||||
foreach ($manifests as $manifest) {
|
||||
$registry->registerModule($manifest);
|
||||
|
||||
Reference in New Issue
Block a user