В функции есть второй аргумент __()
. Необходимо указать домен, который вы используете для своего плагина или темы. В примерах ниже я использую '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()
для объяснения контекста этих терминов.
Вы можете найти другие случаи перевода здесь: Интернационализация: Вы, вероятно, делаете это неправильно
textdomain
должна быть буквальная строка, она не может быть переменной / константой / свойством.sprintf()
. Это действительно способ иметь HTML в переводимой строке.sprintf()
помогает как-то иначе, чем, может быть, более чистый внешний вид. Если у вас есть предложение с HTML внутри, например,Some text with a <strong>strong</strong> word inside.
как можно перевести предложение в целом, а не переводитьSome text with a
,strong
аword inside
индивидуально (что не имеет смысла).Я не буду рассматривать вопрос переменных в строке, так как это уже было сказано.
Вы хотите, чтобы ваша строка была статичной, что означает, что содержимое не изменится. Вы также хотите избежать ненужного HTML.
Вышеуказанное займет две строки в вашей таблице для того, что по сути является одним и тем же текстом. Они могут быть переписаны как:
Сокращение его до одного ряда.
Иногда HTML в тексте неизбежен. Взять, к примеру:
Так как языки являются грамматическими, разделение текста вызовет проблемы для любого, кто переводит.
Практическое правило. HTML- теги форматирования текста в середине предложения в порядке. Предложения, начинающиеся и заканчивающиеся HTML, просто бесполезны.
источник
"<b>$string</b>"
. Тогда вы можете использовать'You currently owe %s dollars'
. Но может потребоваться остаться, если вы используете его с_n()
функцией, которая требует%d
заполнителя.%s
чтобы сделать это немного более ясным.