Разные языки для фронтенда и бэкенда
Я использую англоязычный пакет WordPress, и это очень удобно.
Теперь я хотел бы перевести некоторые элементы блога (такие как "опубликовано", "комментарии" и т.д.), но оставить интерфейс панели управления на английском языке.
Существует ли какой-либо механизм для перевода только элементов сайта?

Вы можете сделать следующее:
- Скачать языковой пакет (например,
de_DE.mo
) с wordpress.org. Если языковой пакет недоступен для отдельной загрузки, вы также можете использовать файл.mo
, который входит в ZIP-архив WordPress для вашего языка. Он находится в папкеwp-content/languages
. - Переместить файл
.mo
в директориюwp-content/languages/
вашей стандартной (англоязычной) установки WordPress. - Изменить константу
WPLANG
в файлеwp-config.php
на новую локаль (например,de_DE
). - Добавить следующий фильтр в ваш файл
functions.php
:
functions.php
add_filter('locale', 'wpse27056_setLocale');
function wpse27056_setLocale($locale) {
if ( is_admin() ) {
return 'en_US';
}
return $locale;
}

что вы имеете в виду под "установить языковой пакет"? мне нужно удалить WordPress и установить новую версию, но на французском? я не хочу удалять мой английский WordPress.

Нет, ничего переустанавливать не нужно. Просто скачайте WordPress на нужном вам языке и скопируйте языковой файл из wp-content/languages/
в вашу оригинальную английскую установку WordPress, затем измените wp-config.php
как описано выше. Или просто скачайте файл fr_FR.mo
с этого сайта.

У меня не было папки wp-content/languages/
, поэтому мне пришлось её создать. После выполнения этих манипуляций я получил обратный эффект от желаемого. Теперь у меня админ-панель на румынском, а страницы (вход выполнен или нет) — на английском. Возможно, мне нужно перевести тему...

Конечно, вам нужен перевод темы. Но админка должна быть на английском, а не на румынском, если вы установите is_admin()
в фильтре выше.

Я добавил этот код в конце файла functions.php текущей темы (twenty ten)... Это правильно?

У меня есть код, основанный на этом, размещение его в functions.php
темы не сработает, так как это уже слишком поздно. Я поместил его в mu-плагин и увидел значительное улучшение результатов.

В WordPress 5.x очень просто установить разные языки для фронтенда и админ-панели
Чтобы изменить язык сайта, перейдите в Настройки -> Общие -> Язык сайта и выберите нужный язык.
Для изменения языка админ-панели перейдите в Пользователи -> Ваш профиль и выберите желаемый язык для админки
Таким образом, все предыдущие решения устарели - теперь каждый пользователь может установить свой собственный язык для интерфейса WordPress

Это должен быть выбранный ответ для версий 2019+. Не требуются плагины, а решение настолько простое. Спасибо!

Для этого вы можете использовать плагины: http://wordpress.org/extend/plugins/kau-boys-backend-localization/ или http://wordpress.org/extend/plugins/wp-native-dashboard/

Добро пожаловать на наш сайт. Пожалуйста, добавьте объяснение: Что делают эти плагины, в чем их различия?

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

Если кто-то все еще ищет решение, вот что нужно делать, начиная с версии 4.7
function wp_noshor_redefine_locale($locale) {
if( is_admin() ):
switch_to_locale('en_US');
endif;
}
add_filter('init','wp_noshor_redefine_locale');
Это заставляет панель управления загружаться на английском языке, после чего вы можете перейти в настройки и выбрать желаемый язык.

Обновлённый ответ для WordPress 4+
Ответ @rofflox всё ещё корректен, но в WordPress произошли некоторые изменения, которые могут повлиять на работу его функции «как есть» начиная с версии 4.0.
Константа wp-config WPLANG
была объявлена устаревшей в пользу установки языка сайта через выпадающий список в Настройки->Общие
. Это означает, что после изменения языка вашего сайта на Шведский (например), админ-панель сайта будет отображаться на английском... но выпадающий список «Язык сайта» в Настройки->Общие
будет предустановлен на Английский (США). Это значит, что если вы позже внесёте изменения в общие настройки и забудете снова выбрать Шведский в качестве языка сайта, весь сайт вернётся к английскому языку.
Я рекомендую создать функции в вашем файле functions.php
следующим образом:
// Установка локали; оригинальная функция от @rofflox
function vnmFunctionality_setLocale($locale) {
if (is_admin()) {
return 'en_US';
}
return $locale;
}
add_filter('locale', 'vnmFunctionality_setLocale');
// Подключение скрипта для принудительной установки выпадающего списка языка на странице общих настроек, на случай, если мы забудем об этом позже.
function vnmFunctionality_countryReminderScript($hook) {
if ($hook != 'options-general.php') {
return;
}
wp_enqueue_script('lang-reminder-script', get_template_directory() . '/js/site-language.js', array('jquery'), '1.0.0', true);
wp_localize_script('lang-reminder-script', 'langObject', array(
'lang' => get_option('WPLANG'),
));
}
add_action('admin_enqueue_scripts', 'vnmFunctionality_countryReminderScript');
А затем файл JavaScript под названием site-language.js
(сохранённый в папке /js/
вашей темы) следующим образом:
jQuery(document).ready(function($) {
$('select#WPLANG').val(langObject.lang).change();
});
Это должно автоматически предустанавливать текущий язык отображения сайта в выпадающем списке на странице настроек, чтобы вам не приходилось помнить о необходимости делать это вручную каждый раз.

Что вам нужно — это перевести вашу тему. Если у вашей темы есть файл .pot, то перевести её легко. Просто следуйте инструкциям по ссылке:
http://www.appthemes.com/blog/how-to-translate-a-wordpress-theme/
В противном случае вам придётся редактировать файлы темы и изменять слова в каждом случае.
