3

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

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

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

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

在此先感谢,彼得

4

3 回答 3

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')
 }
于 2014-10-28T11:50:15.880 回答
1

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

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

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

希望这可以帮助。

此致。

于 2014-10-30T12:06:10.307 回答
0

我注意到在我的 2 个 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

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

于 2014-11-03T13:41:58.913 回答