В настоящее время я работаю над сайтом WordPress, который должен иметь возможность предлагаться на французском языке.я нашел способ заставить тему работать с файлами fr_FR po и mo, когда я добавляю переменную строки запроса l
.т. е.
site.tld
создаст сайт на английском языке vanilla, а 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;
}
}
?>
эта настройка ужеза работой.у меня вопрос: как мне переписать URL, чтобы вместо site.tld/?l=fr
я мог просто предварять структуру папок с fr
то есть site.tld/fr/
?
, например, если есть страница site.tld/portoflio/autumn/
на английском,site.tld/fr/portfolio/autumn/
выплюнет французского.Я получил эту идею с веб-сайта Apple, где язык всегда добавляется к структуре папок.
Я уже могу сделать это с помощью внешнего перенаправления в 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/
и по-прежнему отображать правильную страницу /post / etc?
это вообще возможно?я на правильном пути здесь?Мне нужна ваша помощь, особенно в том, что мудро, а не только в том, что хорошо.я попробовал это http://pmg.co/a-mostly-complete-guide-to-the-wordpress-rewrite-api но ради жизни я не могу заставить это работать.: /
ОБНОВЛЕНИЕ : хорошо, так что вот некоторый прогресс с @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;
}
?>
, теперь /fr
остается вадресная строка, так что это хорошо, но две проблемы сохраняются:
WordPress обслуживает меня главная страница указателя.кажется, что он не использует часть правила &q=$matches[2]
;и
языковой стандарт по-прежнему не установлен должным образом.я проверил, получает ли переменная l
корма, поэтому я добавил echo 'l: $l';
после $l = get_query_var('l');
и, что интересно, я получил два эха: один l:
и другой l: fr
сразу после этого.фильтр locale
запускается дважды?Кажется, что в первый раз он не видит значение queryvar, а затем, кажется, во второй раз он выводит l:
с fr
уже там .. в конце дня локаль все еще не показываетне меняйся.
ааааа помощьэтот плагин qtranslate.делает то, что мне нужноспасибо, особенно за грандиозное усилие @ relu и оставайся в силе.