2016-04-30 2 views
0

Я пытаюсь перевести тему WP. У меня есть этот код:Перевод WP с помощью __() и sprintf()

$translation = __(get_color(), 'textdomain'); 

Он работает, я получаю цвет динамически get_color функции(), и это переводит хорошо. Но когда я использую плагин «Проверка темы», я получаю ошибку для этого кода.

мне нужно использовать вместо этого:

$translation = sprintf(__('%s', 'textdomain'), get_color()); 

Но в этом случае мой заполнитель% s не переводит, и я получаю оригинальное название цвета (не переведено).

Что я делаю неправильно? Спасибо.

ответ

1

А.,

В коде:

$translation = sprintf(__('%s', 'textdomain'), get_color()); 

__() функций проверяет наличие перевода строки «% S» - из которых вы, вероятно, не имеют перевода - а затем заменяет «% s 'с результатом get_color(). Таким образом, значение для get_color() никогда не передаёт функцию перевода.

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

0

Многие средства перевода, извлекающие переводимые строки будет искать строку литералы, как это:

$translation = __('red', 'textdomain'); 

Это безопасная ставка *, что Тематическая Check плагин предупреждает вас о том, что ваш динамический Такие инструменты не будут извлекаться из строки. Это связано с тем, что код не будет выполняться во время извлечения, поэтому выражение get_color() не будет оцениваться в переводимой строке.

Если вам не нужна совместимость с инструментами извлечения строк, просто оставьте свой код в соответствии с вашим первым примером (второй пример неверен, как уже указывалось).

Если вы хотите, чтобы ваш код работал с инструментами перевода, я предлагаю создать файл PHP dummy, содержащий все возможные значения цвета. (предполагая, что список конечен). Ваш файл будет выглядеть примерно так:

<?php 
__('red', 'textdomain'); 
__('blue', 'textdomain'); 
// and so on.. 

Затем, если вы хотите, чтобы остановить фактический перевод вызов продуцирующий «Theme Check» ошибку вы должны реорганизовать его в чем-то, что не получит подобраны. Нечто подобное было бы получить пропустило большинство экстракторов:

$translation = call_user_func('__', get_color(), 'textdomain'); 

* Стоит отметить, что автор Theme Check является основным WordPress вкладчиком и весьма шумный о doing WordPress i18n correctly.

0
echo sprintf(__("text %s", your domain or plugin name), $data); 
+3

Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. – liliscent

+0

sprintf() - это функция PHP: http://php.net/manual/en/function.sprintf.php – jazkat

Смежные вопросы