在导航中使用语言按钮切换语言Wordpress

时间:2014-10-25 13:03:58

标签: php wordpress wordpress-theming qtranslate

我创建了一个需要使用德语和英语的Wordpress主题。在导航中,我有一个按钮,它应根据当前使用的语言更改语言。 (如果他们正在查看英文页面,它应该显示" Deutsch"反之亦然。)

我使用qTranslate Plus并选择在网址(/ de或/ en)中显示语言代码。我的主要问题在于我在自定义页面(带有模板的Wordpress页面)(/ custom-page)并更改它不会改为德语的语言,尽管在源代码中链接显示/ de /自定义页面。它完全忽略语言代码并再次将我带到/ custom-page。所以它似乎正在剥离语言代码。

这是标准的Wordpress行为,如果是这样,我该如何禁用它? 还有更好,更可靠的方式来改变语言吗?将语言存储在会话中会起作用吗?

注意:两者都是"隐藏未翻译的内容"和"隐藏默认语言的URL语言信息。"没有检查。

提前致谢, 彼得

3 个答案:

答案 0 :(得分:1)

我在我正在制作的网站上遇到了类似的问题。我安装了这个扩展,似乎解决了URL的一些问题

https://wordpress.org/plugins/qtranslate-slug/

或者,您可以使用条件语句使用javascript / jQuery来定位按钮以检测html lang attr。像这样:

   var lang = document.documentElement.lang;
 if (lang == 'en-US'){
    $('button').html('your button text')
 }

答案 1 :(得分:1)

qTranslate不受支持。如果你刚刚开始实现它我认为你应该给其他插件一个镜头。以下是qTranslate的一些替代品: mqTranslatezTranslate。两者都是qTranslate叉子,所以你不应该丢失任何东西。

至于你的问题,你可以使用lang选择器简单地用css隐藏当前语言:

:lang(current languagecode) { display: none; /*the other way to hide things*/ text-indent: 9999px; overflow: hidden; }

希望这有帮助。

最诚挚的问候。

答案 2 :(得分:0)

我注意到我的两个wordpress安装(3.8.1更新到4.0),mqtranslate(相同的代码)在使用基于URL的路由时不会翻译内容,类似于你的问题。

我安装了" qtranslate plus"刚刚在一个新的wp 4.0上,它按预期的方式使用基于URL的路由(但似乎搞乱了帖子标题中的日期格式)。

所以我认为问题可能是版本号与qtranslate不能很好地协同工作。 也许ppqtranslate_core.php第173行中的preg_match-code没有给出正确的结果。

的解决方法: 我在这一点上停止挖掘并切换到基于域的路由(en.site.com用于english,site.com用于德语)。这完美无瑕。如果你能做到,试试吧。你需要

  1. 将子域名* .site.com路由到您的域名提供商管理面板中的服务器IP(如果您的提供商不允许使用通配符,则将en.site.com用于单一语言)
  2. 在您的网络服务器(en.site.com)上设置子域,以便在与原始站点相同的目录中进行路由。只需将以下代码(编辑域名和路径到webroot)添加到httpd.conf(或某些服务器上的apache2.conf)
  3. 添加到httpd.conf:

    <VirtualHost *:80>
    ServerName "en.site.com"
    ServerAdmin webmaster@localhost
    DocumentRoot /the/path/to/your/html/
    <Directory />
        Options FollowSymLinks
        AllowOverride All
    </Directory>
    <Directory /the/path/to/your/html/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
    
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>
    

    并使用

    重新启动网络服务器
    /etc/init.d/httpd restart
    

    此基于域的翻译应该有效。