Spaces:
No application file
No application file
File size: 3,268 Bytes
d2897cd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
<?php
namespace Mautic\CoreBundle\Loader;
use Mautic\CoreBundle\Helper\BundleHelper;
use Mautic\CoreBundle\Helper\PathsHelper;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Translation\Loader\ArrayLoader;
use Symfony\Component\Translation\Loader\LoaderInterface;
use Symfony\Component\Translation\MessageCatalogue;
class TranslationLoader extends ArrayLoader implements LoaderInterface
{
public function __construct(
private BundleHelper $bundleHelper,
private PathsHelper $pathsHelper
) {
}
public function load($resource, $locale, $domain = 'messages')
{
$bundles = $this->bundleHelper->getMauticBundles(true);
$catalogue = new MessageCatalogue($locale);
// Bundle translations
foreach ($bundles as $bundle) {
// load translations
$translations = $bundle['directory'].'/Translations/'.$locale;
if (file_exists($translations)) {
$iniFiles = new Finder();
$iniFiles->files()->in($translations)->name('*.ini');
foreach ($iniFiles as $file) {
$this->loadTranslations($catalogue, $locale, $file);
}
}
}
// Theme translations
$themeDir = $this->pathsHelper->getSystemPath('current_theme', true);
if (file_exists($themeTranslation = $themeDir.'/translations/'.$locale)) {
$iniFiles = new Finder();
$iniFiles->files()->in($themeTranslation)->name('*.ini');
foreach ($iniFiles as $file) {
$this->loadTranslations($catalogue, $locale, $file);
}
}
// 3rd Party translations
$translationsDir = $this->pathsHelper->getSystemPath('translations', true).'/'.$locale;
if (file_exists($translationsDir)) {
$iniFiles = new Finder();
$iniFiles->files()->in($translationsDir)->name('*.ini');
foreach ($iniFiles as $file) {
$this->loadTranslations($catalogue, $locale, $file);
}
}
// Overrides
$overridesDir = $this->pathsHelper->getSystemPath('translations', true).'/overrides/'.$locale;
if (file_exists($overridesDir)) {
$iniFiles = new Finder();
$iniFiles->files()->in($overridesDir)->name('*.ini');
foreach ($iniFiles as $file) {
$this->loadTranslations($catalogue, $locale, $file);
}
}
return $catalogue;
}
/**
* Load the translation into the catalogue.
*
* @throws \Exception
*/
private function loadTranslations($catalogue, $locale, $file): void
{
$iniFile = $file->getRealpath();
$content = file_get_contents($iniFile);
$messages = parse_ini_string($content, true);
if (false === $messages) {
// The translation file is corrupt
if ('dev' === MAUTIC_ENV) {
throw new \Exception($iniFile.' is corrupted');
}
return;
}
$domain = substr($file->getFilename(), 0, -4);
$thisCatalogue = parent::load($messages, $locale, $domain);
$catalogue->addCatalogue($thisCatalogue);
}
}
|