Локализация строки с тегом 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>
. Как я могу получить строку для перевода слова "здесь", а также. Я где-то читал, думаю, что это было в Кодексе, что не очень хорошая идея разбивать строку на несколько строк, как это может быть вызывает проблемы для некоторых языков, так как порядок слов в некоторых языках отличается.
Есть еще предложения по решению этой проблемы?
4 answers
Возможное решение, чтобы все можно было перевести как одно жало.
<?php printf(__('Click <a href="%s">Here</a> to go and wacth the video.', 'pietergoosen'), esc_url( get_permalink() )); ?>
Обычно можно с уверенностью предположить, что переводчик обладает достаточными знаниями HTML, чтобы понять, что там происходит.
Другой вариант - разделить тег на две строки:
printf(__('Click %shere%s to go and wacth the video.', 'pietergoosen'), '<a href="'. esc_url( get_permalink() ) . '">', '</a>');
Хотя это не совсем отвечает на вопрос о переводе строк, содержащих HTML, но сделайте шаг назад на мгновение - возможно, вы усложняете ситуацию, чем это необходимо. Почему бы вам не перефразировать текст, чтобы просто сказать "Посмотрите видео". Тогда это не станет проблемой, потому что вы можете просто обернуть всю строку в якорь, оставив строку свободной от любого HTML, например:
printf( '<a href="%s">%s</a>',
esc_url( get_permalink() ),
__( 'Watch the video', 'pietergoosen' )
);
Если ссылка оформлена соответствующим образом (это означает, что она явно доступна для кликабельности) Я не думаю, вам нужно сказать людям "Нажмите здесь".
Просто мысль!
Когда вы смотрите на документацию 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
внутри строки будут заменены. Это поможет вам преодолеть ситуации, когда язык нуждается в совершенно другое количество слов или другая позиция в предложении, которое должно быть обернуто тегом привязки. Это также поможет вам избежать необходимости разделять ваше предложение.