Как изменить значение WPLANG в Wordpress, нажав на ссылку (переключить язык)? - PullRequest
1 голос
/ 31 августа 2010

Я успешно создал файлы для локализации, используя Gettext (называемый es.po и es.mo).

Насколько я знаю, я могу изменить язык, определив значение WPLANG в wp-config.php (в этом случае определите ('WPLANG', 'es'); )

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

Какой лучший способ сделать это?

Ответы [ 3 ]

3 голосов
/ 31 августа 2010

Я выполнил это, используя плагин jLanguage, найденный по адресу http://www.treutech.com/files/wordpress/jLanguage.zip. * Плагин больше не доступен с сайта автора, поэтому я размещаю свою обновленную версию. Это позволяет форматировать сообщения и страницы блога с использованием синтаксиса [english][/english]. Он передает строку запроса в код, чтобы узнать, какой язык использовать. Я начал с изменения кода, чтобы он использовал стандартные двухбуквенные языковые коды. Я также покончил с флагами, которые код использовал для представления различных языков. Тем не менее, после всего этого плагин все еще только переводит страницы или сообщения. Я хотел, чтобы остальная часть сайта была переведена по выбору пользователя.

WordPress допускает интернационализацию; однако, как только вы выберете язык, вы застряли на нем, пока не измените его вручную. Поэтому я создал wp-lang.php. Сначала он смотрит на какой язык пользователь выбрал из доступных языковых ссылок, затем сохраняет его в переменной SESSION, чтобы это состояние было постоянным. Наконец, если выбор не сделан и переменная SESSION отсутствует, код будет искать языки по умолчанию для браузера.

Теперь все эти изменения зависят от того, скачали ли вы языковой пакет, который соответствует выбору языков на сайте. Файл языка MO содержит переводы всех имен функций в WordPress. Поэтому, если пользователь войдет в панель администратора, все будет переведено. Если ваша тема закодирована правильно, то заголовки вашего меню и метаинформация также будут переведены. После всего этого я изменил файл wp-config, включив в него wp-lang. Теперь сайт, на котором это настроено, будет переключаться между испанским и английским.

* сор-lang.php

 session_start();
 if ( isset( $_GET['lang'] ) ) {
    $_SESSION['WPLANG'] = $_GET['lang'];
    define ('WPLANG', $_SESSION[WPLANG]);
 } else {
    if(isset($_SESSION['WPLANG'])) {
        define ('WPLANG', $_SESSION['WPLANG']);
        $_GET['lang'] = $_SESSION['WPLANG'];
    } else {
        if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) ) {
            $languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
             $languages = explode( ",", $languages );
            $_SESSION['WPLANG'] = $languages[0];
            $_SESSION['WPLANG'] = str_replace("-", "_", $_SESSION['WPLANG']);
            $_GET['lang'] = substr($_SESSION['WPLANG'],0,2);
            define ('WPLANG', $_SESSION[WPLANG]);
        } else {
            define ('WPLANG', '');
        }
    }
 }

* wp-config.php - Найти раздел, в котором определена постоянная WPLANG. Добавьте следующую строку непосредственно перед объявлением WPLANG.

 require_once(dirname(__FILE__).'/wp-lang.php');
 define ('WPLANG', ''); 

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

2 голосов
/ 01 марта 2012

Мои 2 цента: я делаю аналогичную вещь, но я также удаляю параметр ?lang=XX из URL.

После того, как вся работа по определению языка выполнена, я делаю перенаправление 307 в коде,на тот же URL (с удалением ?lang=xxx или &lan=xxx), затем die().Это делает URL-адрес очищенным от переменной GET, чистым и потенциально безопасным для закладок.

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

0 голосов
/ 22 января 2014

Моим лучшим решением было ... (session_start (); сверху)

if( !isset( $_GET['lang'] ) && isset($_SESSION['WPLANG']) ) {
        define ('WPLANG', $_SESSION['WPLANG']);
} else {

    if ( !isset( $_GET['lang'] ) ) {
      if ( isset( $_SERVER["HTTP_ACCEPT_LANGUAGE"] ) ) {
        $languages = strtolower( $_SERVER["HTTP_ACCEPT_LANGUAGE"] );
        $languages = explode( ",", $languages );
        $wplang = str_replace("-", "_", $languages[0]);
        $_GET['lang'] = substr($wplang,0,2);
      }
    }

    $language = isset( $_GET['lang'] ) ? htmlspecialchars($_GET['lang'], ENT_QUOTES) : 'es';
    switch ( $language ) {
        case 'en':
            define( 'WPLANG', 'en_US' );
            $_SESSION['WPLANG'] = 'en_US';
        break;

        case 'es':
        default:
            define( 'WPLANG', 'es_ES' );
            $_SESSION['WPLANG'] = 'es_ES';
    }

}
...