Вы здесь

Как правильно добавить HTML разметку к переводимым множественным числам

0

Вопрос в том, как добавить HTML размету, чтоб она не попадал в перевод. Необходимо обернуть и число и текстовое значение по отдельности. Должно получится так:

<span class="count_num">2</span>
<span class="count_label">Topics</span>

Если добавить HTML в format_plural();,

format_plural($topics, '<span class="topic_num">@count</span><span class="topic_label">Topic</span>', '<span class="topic_num">@count</span><span class="topic_label">Topics</span>');

то вся разметка попадает в переводы,

<span class="topic_num">@count[2]</span><span class="topic_label">Topics</span>

несмотря на то, что HTML разметка не запрещена к использованию, хотелось бы найти более правильное решение.

Подскажите возможные варианты

Версия Drupal: 
7.x
Вопрос задан 13.10.2016 - 22:18

Ответы

1
<span class="topic_num"><?php print. $topics; ?></span><span class="topic_label"><?php print format_plural($topics, 'Topic', 'Topics'); ?></span>
Ответ дан 14.10.2016 - 14:46
Аватар пользователя Chi
Chi
68

Да, я так пробовал, но тогда для русского перевода нет второй формы множественного числа

Комментарий оставлен 14.10.2016 - 15:12

Можно попробовать вообще без format_plural() обойтись.
t('Topic', [], ['context' => 'plural-' . locale_get_plural($topics)]);

В переводах должны появиться несколько топиков с разным контекстом (plural-0, plural-1, plural-2).
Ну либо просто preg_replace использовать.

Комментарий оставлен 14.10.2016 - 20:02

Спасибо, первый вариант работает. Так же нашел еще такой вариант, но только для русского языка

function MODULENAME_plural($number, $one, $two, $five) {
  if (($number - $number % 10) % 100 != 10) {
    if ($number % 10 == 1) {
      $result = $one;
    } elseif ($number % 10 >= 2 && $number % 10 <= 4) {
      $result = $two;
    } else {
      $result = $five;
    }
  } else {
    $result = $five;
  }
  return $result;
}
<span class="topic_num"><?php print $topics; ?></span>
<span class="topic_label"><?php print MODULENAME_plural($topics, 'Топик', 'Топика', 'Топиков'); ?></span>
Комментарий оставлен 14.10.2016 - 20:03
-1
format_plural($count, '<span class="count_num">@count</span> <span class="count_label">Topics</span>', '<span class="count_num">@count</span> <span class="count_label">Topics</span>');
Ответ дан 13.10.2016 - 23:51