Локализация строки с тегом html со словом внутри этого тега


Ранее я успешно перевел много строк, но эта вызывает у меня головную боль. Эта часть используется внутри моего content-related.php файл, который я использую для отображения связанных сообщений

Вот текущая строка, которую я использую

<?php echo 'Click <a href="'. esc_url( get_permalink() ) . '">here</a> to go and wacth the video.' ?>

Моя проблема в процессе локализации заключается в

<a href="'. esc_url( get_permalink() ) . '">here</a>

Часть посередине.

Лучшее, что я мог придумать, это

<?php printf(__('Click %s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">here</a>'); ?>

Хорошо, я знаю, что могу просто создать переменную для тег <a> и скорее используйте переменную в строке printf() вместо целого тега <a>, но сейчас это не проблема, и это было сделано только для того, чтобы сначала проверить результат.

Со строкой в измененном порядке строка переводится, за исключением слова "здесь", которое находится внутри тега <a>. Как я могу получить строку для перевода слова "здесь", а также. Я где-то читал, думаю, что это было в Кодексе, что не очень хорошая идея разбивать строку на несколько строк, как это может быть вызывает проблемы для некоторых языков, так как порядок слов в некоторых языках отличается.

Есть еще предложения по решению этой проблемы?

Author: Pieter Goosen, 2014-02-25

4 answers

Возможное решение, чтобы все можно было перевести как одно жало.

<?php printf(__('Click <a href="%s">Here</a> to go and wacth the video.', 'pietergoosen'), esc_url( get_permalink() )); ?>

Обычно можно с уверенностью предположить, что переводчик обладает достаточными знаниями HTML, чтобы понять, что там происходит.

 2
Author: Mark Kaplun, 2014-02-25 13:24:43

Другой вариант - разделить тег на две строки:

printf(__('Click %shere%s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">', '</a>');
 3
Author: levi, 2014-03-05 22:26:43

Хотя это не совсем отвечает на вопрос о переводе строк, содержащих HTML, но сделайте шаг назад на мгновение - возможно, вы усложняете ситуацию, чем это необходимо. Почему бы вам не перефразировать текст, чтобы просто сказать "Посмотрите видео". Тогда это не станет проблемой, потому что вы можете просто обернуть всю строку в якорь, оставив строку свободной от любого HTML, например:

printf( '<a href="%s">%s</a>',
        esc_url( get_permalink() ),
        __( 'Watch the video', 'pietergoosen' )
);

Если ссылка оформлена соответствующим образом (это означает, что она явно доступна для кликабельности) Я не думаю, вам нужно сказать людям "Нажмите здесь".

Просто мысль!

 3
Author: Emyr Thomas, 2014-03-12 10:11:19

Когда вы смотрите на документацию i18n в Кодексе и особенно на Неоднозначность по контексту раздел, затем вы найдете _x() и _ex() (более поздний вариант echo), который позволяет добавить контекст в строку или, другими словами, оставить сообщение для переводчиков:

printf(
    _x(
        'Click %shere%s to go and watch the video',
        '%s represents the opening and closing HTML tags for an anchor or link',
        'your_textdomain'
    ),
    '<a href="'.esc_url( get_permalink() ).'" title="'.get_the_title().'">',
    '</a>'
);

Итак, сначала строка переводится. После этого части %s внутри строки будут заменены. Это поможет вам преодолеть ситуации, когда язык нуждается в совершенно другое количество слов или другая позиция в предложении, которое должно быть обернуто тегом привязки. Это также поможет вам избежать необходимости разделять ваше предложение.

 2
Author: kaiser, 2014-02-25 13:15:12