Intereting Posts
Сортировка сообщений в цикле WooCommerce Членство автора Локально изменить семейство шрифтов Как настроить страницу редактирования таксономии Добавить разделитель в подменю admin Невозможно обновить / сохранить изображение Подключить тип сообщения как пользовательскую таксономию к пользователям и другой пользовательский тип сообщения в панели администратора save_post hook – заголовки уже отправлены? проблема с загрузкой темы wp на сервер ..? Пользовательский отдельный Single.php В каких запросах SQL / WordPress потребуется nonce? Как отображать цены и описания Woocommerce Как использовать jQuery replaceText на домашней странице WordPress? Проверьте, отображается ли страница пользовательского архива таксономии Отправка электронной почты с помощью wp_email и AJAX Как я могу написать этот фрагмент кода, чтобы он отвечал за ответ при отправке пустых полей?

Можно добавить языковой файл в плагин без добавления файлов .po / .mo в каталог плагинов?

Мне нужно добавить языковой файл в существующий плагин. Не для причин перевода, а потому, что я хотел бы изменить все вхождения определенного слова на что-то другое. Хотя я мог бы просто оставить еще один файл .po / .mo, установленный в каталоге языков плагинов, я не хочу потерять языковой файл при обновлении плагина.

Появляется, если плагин использовал load_textdomain для вытягивания файлов из WP_LANG_DIR в дополнение к load_plugin_textdomain тогда я мог бы просто load_plugin_textdomain некоторые файлы .po в /wp-content/languages/ и это сработает.

BuddyPress делает это таким образом и имеет инструкции для выполнения точной вещи, которую я пытаюсь сделать: http://codex.buddypress.org/getting-started/customizing/customizing-labels-messages-and-urls/ . Я изменил каждую ссылку на «Группа» на «Сообщество».

Все, что мне нужно сделать, это сбросить файлы с правильными именами в каталог /wp-content/languages/ и загрузить файлы.

Плагин, который я пытаюсь изменить, это: Подписка на подписку группы BuddyPress .

Он загружает языки, используя эту функцию:

 function activitysub_textdomain() { load_plugin_textdomain( 'bp-ass', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } add_action( 'init', 'activitysub_textdomain' ); 

Solutions Collecting From Web of "Можно добавить языковой файл в плагин без добавления файлов .po / .mo в каталог плагинов?"

Лучший способ сделать это, вероятно, используя второй, выполненный на заказ плагин.

Создайте новый каталог плагинов. Назовите это что-то вроде «example-com-custom-langs» или что-то уникальное для вашего сайта. Там создайте php-файл с заголовком плагина, описывающим, что делает плагин (для вашего собственного здравомыслия), и делайте что-то вроде этого:

 add_action('plugins_loaded','example_com_custom_langs_plugins_loaded'); function example_com_custom_langs_plugins_loaded() { remove_action('init', 'activitysub_textdomain'); // disable the old lang files add_action('init','example_com_custom_langs_init'); // load our new lang files } function example_com_custom_langs_init() { load_plugin_textdomain( 'bp-ass', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); } 

Теперь вы можете поместить свои языковые файлы в каталог / languages ​​этого нового плагина, и они будут загружены вместо оригиналов в другом плагине. И этот плагин не будет обновляться при обновлении другого плагина. Поэтому, пока они не меняются с «bp-ass» в качестве текстового домена, вместо этого вы привыкаете.

Я верю, что вы можете использовать фильтр load_textdomain_mofile

 add_filter('load_textdomain_mofile', 'custom_load_textdomain_mofile', 10, 2); function custom_load_textdomain_mofile( $mofile, $domain){ if ($domain == 'bp-ass') $mofile = 'somepath/to/your/mo/file.mo'; return $mofile; } 

Разница (сравнение Otto) заключается в том, что вы можете указать, что ваш mo-файл для домена не имеет значения, как будет изменена локализация.

Метод buddypress – идиотский, вы не должны использовать перевод, чтобы влиять на поведение сервера и программного обеспечения, перевод должен быть только для ярлыков (вчера провел час, пытаясь понять, почему CPT не работает, и оказалось, что его тип был переводимым и Я перевел его).

Ответы Отто и Олега технически правильны, но есть одна проблема, которую они игнорируют – будущие обновления. Обновление плагина в конечном итоге отменит строки, которые вы хотите переопределить, а затем ваши изменения исчезнут, и поскольку это изменение не является частью фактического кода, никто не будет помнить, что вы сделали, и сможете это сделать снова. Кроме того, в зависимости от типа и количества изменений, которые вы намерены сделать, вы можете сделать любую документацию, которую плагин не может использовать.

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

уточнение: предположим, что исходный плагин имеет <? _e('give me money!','text-domain')?> <? _e('give me money!','text-domain')?> и вы хотите, чтобы вместо печати «дайте мне деньги!». вы хотите, чтобы «дать мне ваши деньги пожалуйста» будет напечатано, и вы используете методы, описанные в других ответах, для достижения этого.

Некоторая версия позже автор плагина решает подчеркнуть предложение и заменяет его на <? _e('GIVE ME THE MONEY!','text-domain')?> <? _e('GIVE ME THE MONEY!','text-domain')?> , но новая строка не находится в модифицированной таблице переводов, которая использовалась как часть решения, и вместо этого, чтобы получить ожидаемое «дайте мне свои деньги» пожалуйста, «вы получаете« ДАЙ МНЕ ДЕНЬГИ! ». Это ошибка, которую трудно понять, потому что к тому времени, когда это произойдет, вы забудете, какой взлом вы сделали изначально.