Кто это работает, чтобы загрузить переведенные строки плагина?

Я интернационализировал свой плагин, и теперь я смотрю, как лучше всего загружать переведенные строки плагина. Я включаю myplugin / languages ​​/ myplugin.pot с моим плагином, но я не планирую распространять файлы .po или .mo.

Мой вопрос:

Является ли моя работа автором плагина использовать такую ​​функцию, как load_plugin_textdomain() чтобы загрузить переведенные строки или это задание конечного пользователя моего плагина?

Причина, по которой я спрашиваю:

Если бы я использовал load_plugin_textdomain() , прохождение третьего аргумента, как в приведенном ниже примере, будет загружать myplugin {$ locale} .mo из myplugin / languages. Тем не менее, конечный пользователь плагина должен будет предоставить этот файл myplugin {$ locale} .mo, но, конечно, когда я выпущу обновление плагина, файл myplugin {$ locale} .mo будет перезаписан.

 function myplugin_load_textdomain() { load_plugin_textdomain( 'myplugin', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' ); } add_action( 'plugins_loaded', 'myplugin_load_textdomain' ); 

Ссылка: https://codex.wordpress.org/Function_Reference/load_plugin_textdomain

EDIT – видимо, это все неправильно, поэтому, пожалуйста, не обращайте внимания.

Вы можете использовать константу WP_LANG_DIR для загрузки переводов из каталога языков с безопасными обновлениями и вернуться к каталогу языков плагинов для любых переводов с плагинами. Местом по умолчанию является wp-content/languages , и пользователи могут сами установить WP_LANG_DIR в wp-config.php . Когда вы загружаете переводы из нескольких источников, будет использоваться первый найденный экземпляр, поэтому пользовательские переводы всегда будут переопределять любые переводы, поставляемые с плагинами, и позволяют пользователям выполнять частичные переводы без перевода всех строк.

 function your_plugin_load_plugin_textdomain(){ $domain = 'your-plugin'; $locale = apply_filters( 'plugin_locale', get_locale(), $domain ); // wp-content/languages/your-plugin/your-plugin-de_DE.mo load_textdomain( $domain, trailingslashit( WP_LANG_DIR ) . $domain . '/' . $domain . '-' . $locale . '.mo' ); // wp-content/plugins/your-plugin/languages/your-plugin-de_DE.mo load_plugin_textdomain( $domain, FALSE, basename( dirname( __FILE__ ) ) . '/languages/' ); } add_action( 'init', 'your_plugin_load_plugin_textdomain' ); 

Тебе нужно:

  • Вызовите load_plugin_textdomain() . ( См. Как перевести ваш плагин ).
  • Поставьте каталог языков myplugin.pot и все локализованные переводы mo-файлов, которые вы хотите распространять
  • Если пользователь хочет переопределить какой-либо файл перевода, он / она должен использовать любой из доступных фильтров для этого, например, фильтр gettext , пользователь не должен напрямую изменять файл перевода.
  • Но на самом деле вам нужно только установить любую строку в функцию gettext с текстовым доменом, соответствующим плагине плагина . Вы не обязаны включать какой-либо языковой файл , особенно если вы отправляете плагин в каталог плагина, потому что он будет импортирован в GlotPress в translate.wordpress.org, где любой может перевести ваш плагин на любой язык, и система создаст языковой пакет что WordPress будет загружаться при необходимости во время установки плагина. Когда языковой пакет устарел, администратор будет замечен об обновлении, так же как обновления для плагинов и тем работают, но отделены от обновления плагина.
  • Не загружайте файлы языков из WP_LANG_DIR прямо в ваш плагин в качестве переопределенной системы, как это предлагается в других ответах. Это может сломать загрузку языковых пакетов из translate.wordpress.org, если файлы mo имеют одну и ту же папку в WP_LANG_DIR . Кроме того, загрузка нескольких файлов mo, одна из которых может превышать другую, может замедлить работу вашего сайта .