Должны ли шор коды в i18n плагинах быть переведены, и если да, то как?

Интернационализация плагина с полдюжины коротких кодов, таких как:

function plugin_show_schedule( $atts, ) { extract( shortcode_atts( array( 'type' => __('week', 'mz-mindbody-api') ), $atts ) ); //Do stuff return $something; } add_shortcode('plugin-show-schedule', 'plugin_show_schedule'); 

И нашел статью, описывающую некоторые способы перевода коротких кодов следующим образом:

 function plugin_show_schedule( $atts, ) { extract( shortcode_atts( array( __('type', 'my-plugin') => __('week', 'mz-mindbody-api') ), $atts ) ); $type = ${__('type', 'mz-mindbody-api')}; //Do stuff return $something; } add_shortcode(__('plugin-show-schedule', 'my-plugin'), 'plugin_show_schedule'); 

Я могу получить type для перевода, как и ожидалось, но plugin-show-schedule остается в en_EN и в приведенной выше статье есть комментарии:

  1. «перевод тега shortcode, другой плагин не смог надежно подключить этот фильтр»
  2. «Как переводчик с 36-летним опытом я могу только улыбнуться – любой настоящий профессиональный переводчик, достойный его соли, сможет определить короткие коды и, очевидно, НЕ перевести их!»

По моему мнению, английский язык является основным языком программирования, но мой опыт также довольно англо-ориентирован. Ожидается, что интернационализированные плагины будут транслировать короткие коды, и если это целесообразно, почему мой код не работает?

РЕДАКТИРОВАТЬ:

На основании нижеприведенного ответа используется метод замены extract :

 $atts = shortcode_atts( array( 'type' => '1' ), $atts ); $type = $atts['type']; 

(Теперь источник $type отображается в текущей области.)

Прежде чем начать, вы никогда не должны использовать extract() . Это ненадежно и крайне сложно отлаживать, когда он терпит неудачу. По этим конкретным причинам он был почти полностью удален из ядра и кода. Для получения более полной информации см. Trac ticket 22400 . Наряду с query_posts , это две наиболее часто используемые и две худшие функции для использования.

Давайте вернемся к фактической точке. Названия коротких кодов и ключи атрибутов никогда не должны быть переведенными и всегда должны быть на английском языке. Это неправильная практика и склонность к ошибкам делать это иначе.

ПРИЧИНЫ (ИМЕНА КОРПОРАЗОВАНИЯ)

  • Если имя короткого кода сделано переводимым, любой текст можно использовать в качестве имени короткого кода. Это подразумевает следующее:

    У меня есть короткий код [somename] . Теперь я могу решить использовать его, следуя ниже, [anothername] . Я загружаю плагин с коротким кодом под названием [anothername] . BANG !!! У вас есть именование. Какой короткий код следует загрузить

    Слова с одинаковой орфографией имеют разные значения на разных языках, но написание слова является допустимым словом на английском языке. Возьмите простой словечко. На английском – это слово, которое опускает звук взрыва. На африкаанс, который является моим родным языком, это означает страх, если он переведен на английский язык. Теперь у меня есть шорт-код [afraid] . Потому что я африкаанс, я хочу это [bang] . Я загружаю взрывной плагин с коротким кодом [bang] и BOOM !!! все идет. ( бум – слово африкаанса для дерева , еще одно слово, действующее на английском языке, и другой язык с разными значениями

ПРИЧИНЫ (КЛАВИШИ АТРИБУТОВ)

  • PHP не позволяет дублировать ключи. Возьмем следующий сценарий

    У меня есть следующий [someshortcode key='value'] : [someshortcode key='value'] . В моем shortcode мои атрибуты: __( 'key' ) => 'default' и 'somekey' => 'some other value' . Поскольку я могу ввести любой текст для key , я решил использовать somekey как переведенное значение. БУМ !!! Ваш короткий код не работает и дает неожиданный результат, и вы не знаете, почему. Вы тратите часы на отладку и проклятие, чтобы узнать, что ваш перевод является виновником

  • Атрибуты Shortcode можно фильтровать, если shortcode_atts третий параметр shortcode_atts. При переходе между ключами атрибутов могут возникать неожиданные результаты при фильтрации атрибутов через эти фильтры

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

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