public function translate($args, $languages = null)
{
if (is_array($args)) {
$lookup = array_shift($args);
} else {
$lookup = $args;
$args = [];
}
if (!$languages) {
$languages = [$this->grav['user']->authenticated ? $this->grav['user']->language : 'en'];
} else {
$languages = (array) $languages;
}
if ($lookup) {
if (empty($languages) || reset($languages) == null) {
if ($this->grav['config']->get('system.languages.translations_fallback', true)) {
$languages = $this->grav['language']->getFallbackLanguages();
} else {
$languages = (array) $this->grav['language']->getDefault();
}
}
}
foreach ((array) $languages as $lang) {
$translation = $this->grav['language']->getTranslation($lang, $lookup);
if (!$translation) {
$language = $this->grav['language']->getDefault() ?: 'en';
$translation = $this->grav['language']->getTranslation($language, $lookup);
}
if (!$translation) {
$language = 'en';
$translation = $this->grav['language']->getTranslation($language, $lookup);
}
if ($translation) {
if (count($args) >= 1) {
return vsprintf($translation, $args);
} else {
return $translation;
}
}
}
return $lookup;
}