__ () с sprintf возвращает нетранслируемую строку

Я просматриваю некоторый код устаревшего кода и добавляю функции i18n всюду, когда я наткнулся на фрагмент локализации, который я нашел внутри функции pre_get_document_title : (упрощенный)

 $title = 'Hello World'; __( $title, 'my_text_domain' ); 

Это возвращает правильную переведенную строку. Недавно мне было указано, что это недопустимый синтаксис, поскольку функции локализации должны получать только строку; не переменная, не возвращаемое значение функции. Рекомендуемый (и правильный) синтаксис, как видно из многочисленных тем:

 sprintf( __( '%s', 'my_text_domain' ), $title ); 

Сделав это изменение, я обнаружил, что все мои названия теперь по-прежнему на английском. т.е. ничего не переводится. Все языковые файлы все еще существуют, все, что я сделал, это изменение вызовов __ ().

Я что-то пропустил?

Solutions Collecting From Web of "__ () с sprintf возвращает нетранслируемую строку"

Порядок вызываемых функций неверен.

С помощью этого кода:

 sprintf( __( '%s', 'my_text_domain' ), $title ); 
  • Вы пытаетесь перевести строку «% s» в домене «my_text_domain».
  • вы затем заменяете переведенную строку для «% s» (которая является «% s»), по содержимому переменной $title .
  • Поэтому ваш код похож на sprintf( '%s', $title);

Что ты должен делать:

 __( sprintf( '%s', $title ), 'my_text_domain' ); 
  • sprintf() вернет ваше название
  • __() переведет возвращаемое название

Кстати, если вы планируете использовать только заголовок сообщения, вам, вероятно, не нужно использовать sprintf() а вместо этого:

 __( $title, 'my_text_domain );