public function loadMessages($lang = 'en', $force = false)
{
if (!$this->isValidLanguage($lang)) {
$lang = 'en';
}
if ($this->messages && isset($this->messages['__lang']) && $this->messages['__lang'] == $lang && $force == false) {
return null;
}
if (!$lang) {
return null;
}
$code = 'core/lang/' . $lang;
$this->messages = $this->cacher->getFastCache($code);
$md5 = '';
$bundles = array();
foreach ($this->jarves->getBundles() as $bundleName => $bundle) {
$path = $bundle->getPath();
if ($path) {
$path .= "/Resources/translations/{$lang}.po";
if (file_exists($path)) {
$md5 .= @filemtime($path);
$bundles[] = $bundleName;
}
}
}
$md5 = md5($md5);
if (!$this->messages || count($this->messages) == 0 || !isset($this->messages['__md5']) || $this->messages['__md5'] != $md5) {
$this->messages = array('__md5' => $md5, '__plural' => $this->getPluralForm($lang), '__lang' => $lang);
foreach ($bundles as $key) {
$file = $this->jarves->resolvePath("@{$key}/{$lang}.po", 'Resources/translations');
$po = $this->getLanguage($file);
$this->messages = array_merge($this->messages, $po['translations']);
}
$this->cacher->setFastCache($code, $this->messages);
}
include_once $this->getPluralPhpFunctionFile($lang);
return $this->messages;
}
/** * @ApiDoc( * section="Interface i18n", * description="Prints all language messages" * ) * * @Rest\QueryParam(name="lang", requirements="[a-z]{2,3}", strict=true, description="The language code") * @Rest\QueryParam(name="javascript", requirements=".+", default=false, description="If it should be printed as javascript") * * @Rest\Get("/admin/ui/language") * * @param ParamFetcher $paramFetcher * * @return array|string depends on javascript param */ public function getLanguageAction(ParamFetcher $paramFetcher) { $lang = $paramFetcher->get('lang'); $javascript = $paramFetcher->get('javascript'); if (!$this->translator->isValidLanguage($lang)) { $lang = 'en'; } $this->pageStack->getSession()->set('admin_language', $lang); $messages = $this->translator->loadMessages($lang); if ($javascript) { $response = new Response(); $response->headers->set('Content-Type', 'text/javascript'); $content = "if( typeof(jarves)=='undefined') window.jarves = {}; jarves.lang = " . json_encode($messages, JSON_PRETTY_PRINT); $content .= "\nLocale.define('en-US', 'Date', " . $this->templating->render('JarvesBundle:Default:javascript-locales.js.twig') . ");"; $response->setContent($content); return $response; } else { $messages['mootools'] = $this->templating->render('JarvesBundle:Default:javascript-locales.js.twig'); return $messages; } }