【问题标题】:Switching language Wordpress with language button in navigation在导航中使用语言按钮切换语言 Wordpress
【发布时间】:2014-10-25 13:03:57
【问题描述】:

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

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

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

注意:“隐藏未翻译的内容”和“隐藏默认语言的 URL 语言信息”。未选中。

提前致谢, 彼得

【问题讨论】:

  • qTranslate 有“隐藏未翻译的内容”等选项,是否有可能您没有提供已翻译的内容并设置了该选项?您也可能隐藏了默认语言代码。
  • 感谢您的帮助。 “隐藏未翻译的内容”和“隐藏默认语言的 URL 语言信息”。未选中。
  • 什么是“自定义页面”?
  • 带有模板的 Wordpress 页面
  • 请在 admin 中创建一个页面并选择此文件作为模板。然后在此模板文件中使用 the_content() 函数调用内容。我认为这将解决您的问题。

标签: php wordpress wordpress-theming qtranslate


【解决方案1】:

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

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

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

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

【讨论】:

  • 这个插件似乎不是最新的,或者与 qTranslate Plus 兼容。
【解决方案2】:

qTranslate 没有得到很好的支持。如果您刚刚开始实施它,我认为您应该尝试其他插件。以下是 qTranslate 的一些替代品: mqTranslatezTranslate。两者都是 qTranslate 叉子,所以你不应该丢失任何东西。

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

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

希望这会有所帮助。

最好的问候。

【讨论】:

  • 谢谢,我会试一试并发布结果。
【解决方案3】:

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

我刚刚在新的 wp 4.0 上安装了“qtranslate plus”,它与基于 url 的路由按预期工作(但似乎弄乱了帖子标题中的日期格式)。

所以我认为问题可能是版本号不能很好地与 qtranslate 一起使用。 ppqtranslate_core.php 第 173 行中的 preg_match-code 可能没有给出正确的结果。

解决方法: 我此时停止挖掘并切换到基于域的路由(英语为 en.site.com,德语为 site.com)。这完美无缺。如果你能做到,那就试试吧。你需要

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

添加到 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

在此基于域的翻译应该可以工作之后。

【讨论】:

    猜你喜欢
    • 2021-09-11
    • 2012-08-16
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多