Как перевести "Order total" в Drupal Commerce

В Drupal Commerce имеется очень неприятная проблема, с которой приходится сталкиваться каждый раз при создании очередного магазина. Проблема тянется очень давно. Почитать начало можно тут, там же ссылки, по которым можно перейти и почитать ишью. Решение, которое предлагается, мне не нравится, потому что ставить дополнительные модули, несущие громоздкий функционал для перевода пары строк - помоему маразм, патчить модули - тоже не интересно, каждый раз при выходе новой версии модуля - тратить время на патч модуля мне как то не интересно.

Какие же есть решения?

Первое решение подробно описано здесь, но мне этот способ не очень нравится по нескольким причинам:

  • Если тема админки отличается от дефолтной, то дополнительно придется или хакать тему админки или создавать сабтему;
  • Если на сайте используется несколько тем, то код придется пихать в каждую тему, такая идея мне тоже не нравится, потому что по факту один и тот же код будет разбросан по разным файлам.

Второе решение более универсальное и уже не привязано к теме оформления. Для его реализации создадим маленький модуль, в котором подменим theme функцию:

/**
 * Implements hook_theme_registry_alter().
 */
function example_theme_registry_alter(&$theme_registry) {
  $theme_registry['commerce_price_formatted_components']['function'] = 'theme_example_price_formatted_components';
}

/**
 * Themes a price components table.
 *
 * @param $variables
 *   Array contains the 'components' array and original 'price' array.
 *
 * @return string
 *   The formatted price components.
 */
function theme_example_price_formatted_components(&$variables) {
  // Add the CSS styling to the table.
  drupal_add_css(drupal_get_path('module', 'commerce_price') . '/theme/commerce_price.theme.css');

  // Build table rows out of the components.
  $rows = array();
  $variables['components']['commerce_price_formatted_amount']['title'] = t('Order total');
  foreach ($variables['components'] as $name => $component) {
    $rows[] = array(
      'data' => array(
        array(
          'data' => $component['title'],
          'class' => array('component-title'),
        ),
        array(
          'data' => $component['formatted_price'],
          'class' => array('component-total'),
        ),
      ),
      'class' => array(drupal_html_class('component-type-' . $name)),
    );
  }

  return theme('table', array('rows' => $rows, 'attributes' => array('class' => array('commerce-price-formatted-components'))));
}

Комментарии (0)