Drupal 8 локализация логотипа

Допустим, у нас есть сайт с поддержкой двух и более языков, и нужно выводить разные логотипы в зависимости от текущего языка. Ну, потому что там надписи переведены.

Если исходить из того, что лого выводится в блоке Site branding, то вопрос решается вот таким небольшим кодом, размещенным в файле темы mytheme.theme:

/**
 *
 * hook_preprocess_block()
 *
 * @param array $variables
 */
function mytheme_preprocess_block(&$variables) {
  if ($variables['plugin_id'] == 'system_branding_block') {
    // определяем язык
    if (\Drupal::languageManager()->getCurrentLanguage()->getId() == 'ru') {
      $logo_name .= 'logo.svg';
    } else {
      $logo_name .= 'logo-en.svg';
    }
    $variables['site_logo'] = '/themes/mytheme/' . $logo_name;
  }
}

Файлы с логотипами, соответственно, хранятся в /themes/mytheme/logo.svg и /themes/mytheme/logo-en.svg. А если на странице несколько блоков с разными лого (например, в хедере и футере), различать их можно, проверяя содержимое $variables['elements']['#id'].

Комментарии