From 19db7c109322b6c3d2e7439bc776ec0ca9be1094 Mon Sep 17 00:00:00 2001 From: Chaim Date: Mon, 6 Apr 2026 14:27:44 +0000 Subject: [PATCH] feat: AfterInstall creates custom i18n directories for all locales Ensures custom/Espo/Custom/Resources/i18n/{locale}/ exists for en_US, fa_IR, he_IL, and the system language. Without this, Label Manager fails with 500 on fresh installs using fa_IR (Hebrew RTL wrapper) because the directory doesn't exist and EspoCRM doesn't create it automatically. Co-Authored-By: Claude Opus 4.6 (1M context) --- LegalAssistance-1.3.0.zip | Bin 0 -> 32791 bytes manifest.json | 2 +- scripts/AfterInstall.php | 25 +++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 LegalAssistance-1.3.0.zip diff --git a/LegalAssistance-1.3.0.zip b/LegalAssistance-1.3.0.zip new file mode 100644 index 0000000000000000000000000000000000000000..1bbf98d6b8a7bd779f3e13774ba7c8cd2ea3cba3 GIT binary patch literal 32791 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 QLK6681YU0@t-$~O59`*n-~a#s literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index 5d84d38..d53d437 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "LegalAssistance", - "version": "1.2.3", + "version": "1.3.0", "acceptableVersions": [">=8.0.0"], "php": [">=8.1"], "releaseDate": "2026-04-06", diff --git a/scripts/AfterInstall.php b/scripts/AfterInstall.php index 4a028de..41e33ab 100644 --- a/scripts/AfterInstall.php +++ b/scripts/AfterInstall.php @@ -24,6 +24,10 @@ class AfterInstall $log->info('LegalAssistance: Running AfterInstall...'); + // 0. Ensure custom i18n directories exist for all supported locales + $config = $container->getByClass(Config::class); + $this->ensureI18nDirectories($config, $log); + // 1. Deploy ai-gateway plugin files $this->deployPluginFiles($log); @@ -42,6 +46,27 @@ class AfterInstall $log->info('LegalAssistance: AfterInstall completed.'); } + private function ensureI18nDirectories(Config $config, Log $log): void + { + $basePath = 'custom/Espo/Custom/Resources/i18n'; + + $language = $config->get('language', 'en_US'); + + $locales = array_unique(['en_US', 'fa_IR', 'he_IL', $language]); + + foreach ($locales as $locale) { + $dir = $basePath . '/' . $locale; + + if (!is_dir($dir)) { + if (mkdir($dir, 0775, true)) { + $log->info("LegalAssistance: Created i18n directory: {$dir}"); + } else { + $log->warning("LegalAssistance: Failed to create i18n directory: {$dir}"); + } + } + } + } + private function deployPluginFiles(Log $log): void { // Source: extension's plugins/ directory (relative to EspoCRM root after install)