До сих пор я занимался некоторыми переводами в Wordpress и пытался прочитать официальную документацию по gettext, но не пойму одну, может быть, простую вещь: каковы различия между этими начинаниями, такими как __ (, _e (и т. Д.?) И даже подробнее: какие еще есть рядом? Заранее спасибо!
Фрэнк
localization
Цирк Цирк
источник
источник
Ответы:
__
(двойное подчеркивание) - базовая функция перевода. Он переводит строку и возвращает ее в виде строки._e
делает то же самое__
, но эхо - результат немедленно._x
это контекстная функция перевода. У него есть второй вариант предоставления контекста людям, которые делают перевод._ex
такой же, как_x
, но эхо результат.Пример использования
_x
:Иногда одна и та же строка может отличаться на других языках. Предоставление контекста для переводчиков может помочь им выбрать правильные слова.
Функции быстрого доступа:
esc_attr__
: Эквивалентно,__
но также пропускает результатesc_attr
.esc_html__
: Эквивалентно,__
но также пропускает результатesc_html
.esc_attr_e
: Эквивалентно,_e
но также пропускает результатesc_attr
.esc_html_e
: Эквивалентно,_e
но также пропускает результатesc_html
.esc_attr_x
: Эквивалентно,_x
но также пропускает результатesc_attr
.esc_html_x
: Эквивалентно,_x
но также пропускает результатesc_html
._n
является обработчиком множественного числа Пример:В этом примере есть два способа сказать количество тако, в зависимости от того, является ли он единственным или нет. Первое использование $ number сообщает
_n
функции, какую версию использовать. Второе использование $ number происходит в sprintf, чтобы заменить% d фактическим числом в строке.Не существует эквивалента для функции эха
_n
, но есть функция с именем_nx
. Это комбинация_n
и_x
. Плюрализация и контекст._n_noop
особенный. Он используется для перевода множественных строк, но на самом деле не выполняет перевод немедленно. Это полезно, если вы хотите, чтобы строки были централизованы, но фактически выполняли работу в другом месте. Функция, которая на самом деле делает работу в другом местеtranslate_nooped_plural
.Пример:
Это не используется много, но может быть удобно для организации. Если вы поместите все свои строки, например, в один файл, а затем будете ссылаться на них в другом месте, это будет невозможно просто
_n
, вам нужно что-то вроде_n_noop
этого._nx_noop
такой же, как_n_noop
, но также может принимать контекст для переводчиков, так же, как_x
.Обратите внимание, что вы можете поместить домен либо в вызов функции noop, либо в вызов функции translate_nooped_plural. Все, что имеет больше смысла для вашей организации. Если у обоих есть домен, побеждает тот, который был передан вызову noop.
number_format_i18n
является эквивалентом встроенного в PHP number_format , но он добавляет в обработку такие вещи, как десятичные дроби и т. д., которые отличаются в других локалях.date_i18n
является эквивалентом встроенной даты в PHP, а также со всей необходимой обработкой. Названия месяцев, дней и т. ДКроме того, никогда не нарушайте законы . Просто напоминание. :)
источник
__ (), _e () и _x (), _ex ()
__()
и_e()
, по сути, являются как оберткойtranslate()
(не использовать напрямую), так и почти одинаковыми.Разница заключается в том, что
__()
возвращает переведенную строку и_e()
повторяет ее. Оба должны указывать строку как обязательный параметр и обычно, хотя и необязательно, также текстовый домен.Аналогично, есть
_x()
и_ex()
, которые позволяют вам указать контекст, который может описать, где появляется строка. Если ваш проект включает более нескольких десятков переводимых строк, использование контекста имеет большой смысл.Также обратите внимание на наличие
_n()
и_nx()
для множественного числа.Пример общего использования
параметры
Все параметры, кроме
$number
строк. Все, кроме$domain
обязательных.Дальнейшая гибкость с переменными и sprintf ()
Если ваши строки будут содержать переменные числа или слова, используйте
sprintf()
:Дополнительные ресурсы
Некоторые дополнительные ресурсы для предстоящего WordPress I18n Ninja:
источник
Я не специалист по переводам, но на странице Кодекса WordPress есть хорошая документация и объясняется причина использования каждого экземпляра.
Со страниц кодекса:
__()
Используется, когда сообщение передается в качестве аргумента другой функции;
_e()
используется для написания сообщения прямо на страницу. Более подробно об этих двух функциях:__('message')
Ищет в модуле локализации перевод «сообщения» и передает перевод в оператор возврата PHP. Если перевод «message» не найден, он просто возвращает «message».
_e('message')
Ищет в модуле локализации перевод 'message' и передает перевод в оператор PHP echo. Если перевод «сообщение» не найден, он просто повторяет «сообщение».
Обратите внимание, что если вы интернационализируете тему или плагин, вы должны использовать
"Text Domain"
.Фреймворк gettext заботится о большей части WordPress. Однако в дистрибутиве WordPress есть несколько мест, где нельзя использовать gettext:
Ссылка на страницу Кодекса
Дополнительная информация о том, когда gettext не работает
Надеюсь, что это ответит на ваш вопрос, если не сообщите нам, и, возможно, кто-то еще может помочь, или я могу провести еще какое-то исследование.
источник