Я хочу получить разные URL-адреса для разных языков.
Например:
http://www.example.com/en/users/create
http://www.example.com/es/usuarios/crear
У меня включен g11n, и я пробовал это:
Router::connect('/users/create',array('controller'=>'User','action'=>'add'));
Router::connect('/usuarios/crear',array('controller'=>'User','action'=>'add'));
Но... в header.html.php, где у меня есть код меню:
<ul id="nav">
<li class="menu-item ">
<?php echo $this->html->link('New User','/user/add') ?>
</li>
</ul>
Мне нужна функция, которая возвращает ссылку:
<a href="http://www.example.com/es/usuarios/crear">...</a>
когда текущий язык испанский.
or
<a href="http://www.example.com/en/users/create">...</a>
когда текущий язык английский.
Извините за мой английский...
Редактировать:
Я решил проблему переопределения класса \lithium\template\helper\Html.
<?php
namespace app\extensions\helper;
use lithium\core\Environment;
function getLanguage($locale)
{
$res = array_shift(explode('_', $locale));
if(!$res)return '?';
else return $res;
}
class CustomHtml extends \lithium\template\helper\Html {
private static $_mapping = array(
'Users' => array(
'Add' => array(
'es' => '/es/usuarios/crear',
'en' => '/en/users/create',
)
)
);
/**
* Override Helper::link
*/
public function link($title, $url = null, array $options = array()) {
if(is_array($url))
{
if(key_exists('controller', $url))
{
$controller = $url['controller'];
if(key_exists('action', $url))
{
$action = $url['action'];
$locale = key_exists('locale', $url) ? $url['locale'] : getLanguage(Environment::get('locale'));
$new_url = $this->_matchUrl($controller, $action, $locale);
if($new_url)
{
return parent::link($title, $new_url,$options);
}
else
{
die('?');
}
}
}
}
return parent::link($title,$url,$options);
}
private function _matchUrl($controller, $action, $locale)
{
if(isset(self::$_mapping[$controller][$action][$locale]))
{
return self::$_mapping[$controller][$action][$locale];
}
return null;
}
}
Теперь в шаблоне я могу использовать эту функцию, чтобы получить правильную ссылку:
<?php echo $this->CustomHtml->link('Create user',array('controller'=>'Users', 'action' => 'add')) ?>
Я уверен, что это не лучшее решение. Но это работает...