如何通过单击链接(切换语言)更改Wordpress中的WPLANG值?

如何通过单击链接(切换语言)更改Wordpress中的WPLANG值?,wordpress,gettext,Wordpress,Gettext,我使用名为es.po和es.mo的Gettext成功地创建了本地化文件 据我所知,我可以通过在wp-config.php中定义WPLANG的值来更改语言,在本例中定义'WPLANG','es' 我希望用户通过单击链接更改其首选语言 做这件事的最佳方法是什么?我通过构建在上找到的jLanguage插件来实现这一点*该插件在作者的网站上不再可用,因此我正在托管我的更新版本。这允许您使用[english][english]语法格式化日志和页面。它将查询字符串传递给代码,以了解使用哪种语言。我首先修改代

我使用名为es.po和es.mo的Gettext成功地创建了本地化文件

据我所知,我可以通过在wp-config.php中定义WPLANG的值来更改语言,在本例中定义'WPLANG','es'

我希望用户通过单击链接更改其首选语言


做这件事的最佳方法是什么?

我通过构建在上找到的jLanguage插件来实现这一点*该插件在作者的网站上不再可用,因此我正在托管我的更新版本。这允许您使用[english][english]语法格式化日志和页面。它将查询字符串传递给代码,以了解使用哪种语言。我首先修改代码,使其使用标准的两个字母的语言代码。我还去掉了代码用来表示各种语言的标志。然而,在所有这些之后,插件仍然只翻译页面或帖子。我希望网站的其余部分根据用户的选择进行翻译

WordPress允许国际化;然而,一旦你选择了一种语言,你就会一直使用它,直到你手动改变它。所以我创建了wp-lang.php。它首先查看用户从可用的语言链接中选择的语言,然后将其存储在会话变量中,以便状态保持不变。最后,如果没有选择,并且没有会话变量,代码将查看浏览器的默认语言

现在,所有这些更改都取决于您是否下载了与站点上的语言选项相对应的语言包。语言MO文件包含WordPress中所有函数名的翻译。因此,如果用户登录到管理面板,所有内容都将被翻译。如果主题编码正确,那么菜单标题和元信息也会被翻译。在所有这些之后,我修改了wp-config文件以包含wp-lang。现在这个设置的站点将在西班牙语和英语之间切换

*wp-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', ''); 

此页面将首先检查浏览器的默认语言,然后设置语言。如果没有,用户还可以根据从帖子中选择的语言设置语言。该语言在会话变量中设置为在整个访问过程中保持状态。

我通过构建在中找到的jLanguage插件实现了这一点*该插件在作者的网站上不再可用,因此我正在托管我的更新版本。这允许您使用[english][english]语法格式化日志和页面。它将查询字符串传递给代码,以了解使用哪种语言。我首先修改代码,使其使用标准的两个字母的语言代码。我还去掉了代码用来表示各种语言的标志。然而,在所有这些之后,插件仍然只翻译页面或帖子。我希望网站的其余部分根据用户的选择进行翻译

WordPress允许国际化;然而,一旦你选择了一种语言,你就会一直使用它,直到你手动改变它。所以我创建了wp-lang.php。它首先查看用户从可用的语言链接中选择的语言,然后将其存储在会话变量中,以便状态保持不变。最后,如果没有选择,并且没有会话变量,代码将查看浏览器的默认语言

现在,所有这些更改都取决于您是否下载了与站点上的语言选项相对应的语言包。语言MO文件包含WordPress中所有函数名的翻译。因此,如果用户登录到管理面板,所有内容都将被翻译。如果主题编码正确,那么菜单标题和元信息也会被翻译。在所有这些之后,我修改了wp-config文件以包含wp-lang。现在这个设置的站点将在西班牙语和英语之间切换

*wp-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美分:我做了类似的事情,但我也从URL中删除了?lang=XX参数

在语言检测的所有工作完成后,我在代码中执行307重定向,将?lang=xxx或&lan=xxx从同一URL中删除,然后死亡。这使得URL清除了GET变量,对于书签来说是干净的和潜在的安全的

A
lso我将语言首选项存储在cookie中,以允许用户在下次访问时看到相同的语言。

我的2美分:我做了类似的事情,但我也从URL中删除了?lang=XX参数

在语言检测的所有工作完成后,我在代码中执行307重定向,将?lang=xxx或&lan=xxx从同一URL中删除,然后死亡。这使得URL清除了GET变量,对于书签来说是干净的和潜在的安全的


此外,我还将语言首选项存储在cookie中,以允许用户在下次访问时看到相同的语言。

我的最佳解决方案是。。。会议开始;最上面

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';
    }

}

我最好的解决办法是。。。会议开始;最上面

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';
    }

}

嘿,这是一个非常好的实现,但是我应该如何为用户编写锚链接来更改语言呢?像这样的?对wp_lang.php的第一部分从链接中获取$_GET['lang',并设置seision变量,然后为WordPress设置wp_lang常量。嘿,这是一个非常好的实现,但是我应该如何为用户编写锚定链接以更改语言?像这样的?对wp_lang.php的第一部分从链接中获取$_GET['lang'],设置seision变量,然后为WordPress设置wp_lang常量。