Intereting Posts

HTML внутри строки перевода __ () или _e ()

Каков правильный подход к построению строк перевода?

Например,

echo __( 'Hello ' . $first . ' you owe me money.' ); echo __( '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>' ) 

Можно ли добавить строки и / или HTML или выполнить их сначала, а затем запустить через перевод, например:

 $html = '<div><p>Top: ' . $t_margin . '</p>' . '<p>Bottom: ' . $b_margin . '</p></div>'; echo __( $html ); 

Solutions Collecting From Web of "HTML внутри строки перевода __ () или _e ()"

В функции __() есть второй аргумент. Он должен быть установлен в том домене, который вы используете для своего плагина или темы. В приведенных ниже примерах я использую 'text_domain' . Строка домена должна быть уникальной. Он не должен соответствовать любой другой строке домена. Не используя аргумент текстовой области, по умолчанию используется значение по 'default' имени домена WordPress. Пройдите по ссылке, чтобы узнать больше.

Всегда используйте строку ( 'text_domain' ). Никогда не используйте переменную, функцию или константу со строкой в ​​ней. Большинство (все?) Переводческие программы не будут видеть его без строки.

Ваш код:

 echo __( 'Hello ' . $first . ' you own me money.' ); 

Не включайте переменные в строку.

Лучший способ:

 echo sprintf( __( 'Hello %s you own me money.', 'text_domain' ), $first ); 

Или просто:

 printf( __( 'Hello %s you own me money.', 'text_domain' ), $first ); 

Заполнитель %s сообщает человеческому переводчику, что строка идет туда. Используйте %d для чисел. Есть и другие заполнители .

(Это предложение является грамматически неправильным английским языком. Используйте 'Hello %s, you owe me money.' или 'Hello %s, you own my money.' зависимости от того, что вы намеревались.)


Ваш код:

 $html = '<div><p>Top: ' . $t_margin . '</p>' . <p>Bottom: ' . $b_margin . '</p></div>'; 

Не переводите HTML. Это то же самое на любом языке.

Лучший способ:

 $html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) . $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin ); 

Или разбить его на несколько строк:

 $html = sprintf( '<div><p>%s</p><p>%s</p></div>', __( 'Top: ', 'text_domain' ) . $t_margin, __( 'Bottom: ', 'text_domain' ) . $b_margin ); 

Если не ясно, что такое Top и Bottom , вы можете использовать _x() чтобы объяснить контекст этих терминов.


Вы можете найти другие случаи перевода здесь: Интернационализация: вы, вероятно, ошибаетесь

Я не буду рассматривать проблему переменных в строке, поскольку это уже сказано.

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

 __( '<p>Hello World!</p>' ); __( '<h1>Hello World!</h1>' ); 

Вышеприведенное займет две строки в таблице для того, что по сути является одним и тем же текстом. Их можно переписать как:

 '<p>' . __( 'Hello World!' ) . '</p>' '<h1>' . __( 'Hello World!' ) . '</h1>' 

Сокращение его до одной строки.

Иногда HTML в тексте неизбежно. Возьмем, к примеру:

 __( 'You currently owe <b>%s</b> dollars' ); 

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

Практическое правило. Текстовые теги форматирования текста в формате HTML в порядке. Предложения, начинающиеся и заканчивающиеся HTML, просто теряют пространство.