我目前正在开发一个 WordPress 网站,该网站需要提供法语版本。当我添加查询字符串变量时,我找到了一种使主题与 fr_FR po 和 mo 文件一起使用的方法l
. i.e.
site.tld
将产生普通的英语网站,而site.tld/?l=fr
将激活我的functions.php中的以下代码以提供法语翻译:
<?php
// http://codex.wordpress.org/Plugin_API/Filter_Reference/locale
add_filter( 'locale', 'set_my_locale' );
function set_my_locale( $lang ) {
if ("fr" == substr(strtolower(trim(strip_tags(stripslashes($_GET['l'])))), 0, 2)) {
// set language to french
return "fr_FR";
} else {
// return original locale
return $lang;
}
}
?>
这个设置已经可以工作了。我的问题是:我如何重写网址而不是site.tld/?l=fr
我可以在文件夹结构前面添加fr
i.e. site.tld/fr/
?
就像有一个页面一样site.tld/portoflio/autumn/
用英语讲,site.tld/fr/portfolio/autumn/
会吐出法国的。我从苹果网站得到了这个想法,其中语言总是预先添加到文件夹结构中。
我已经可以通过 htaccess 中的外部重定向来实现这一点:
RewriteBase /
RewriteCond ^[a-z]{2}/
RewriteRule ^([a-z]{2})/(.*)$ /$2?l=$1 [R,L]
这有效,但是一旦我删除了R
标记它服务于法语翻译的 404 未找到不是。我猜我所做的是搞乱了 WordPress 的重写规则,因为我需要使用漂亮的永久链接。现在我准备使用Month and name
(/%year%/%monthnum%/%postname%/
)在管理常规选项中。
我的问题是,如何让 wordpress 忽略/fr/
部分并仍然提供正确的页面/帖子/等?
这可能吗?我在正确的轨道上吗?我需要你的帮助,尤其是做明智的事情,而不仅仅是做美好的事情。我试过这个http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api但对于我的一生来说,我无法让它发挥作用。 :/
UPDATE:好的,下面是从@relu 得到的一些进展:
我确保我的规则已被取消.htaccess
然后我添加了 @relu 的规则,但方式如下,因为 Relu 总是将我发送到相同的地址,而无需/fr
:
<?
// http://pmg.co/custom-wordpress-shortlinks
add_action( 'init', 'pmgtut_add_rewrites' );
function pmgtut_add_rewrites() {
add_rewrite_rule( '^([a-z]{2})/?$', 'index.php?l=$matches[1]', 'top' );
add_rewrite_rule( '^([a-z]{2})/(.*)$', 'index.php?l=$matches[1]&q=$matches[2]', 'top' );
}
add_filter( 'query_vars', 'pmgtut_query_vars', 10, 1 );
function pmgtut_query_vars( $vars ) {
$vars[] = 'l';
return $vars;
}
?>
now the /fr
保留在地址栏中,所以这是一件好事,但仍然存在两个问题:
wordpress 正在为我提供主索引页面。似乎没有使用&q=$matches[2]
规则的一部分;和
区域设置仍然没有正确设置。我检查了变量是否l
正在吃饱,所以我添加了echo 'l: $l';
after $l = get_query_var('l');
有趣的是我得到了两个回声:一l:
和另一个l: fr
就在那之后。是个locale
过滤器运行两次?似乎第一次它没有看到 queryvar 的值,然后似乎第二次它输出l:
with fr
已经在那里了..在一天结束时,区域设置仍然没有改变。
啊啊帮助。
最终更新:在我最后一次沮丧中我再次搜索,找到了这个插件 qtranslate。做我需要的。谢谢你们,特别是@relu 的史诗般的努力和保持力量。