Final version 2.0
This commit is contained in:
parent
0d2d75242f
commit
c091dacfc2
|
@ -99,39 +99,54 @@ class Multilang_Core {
|
|||
}
|
||||
|
||||
// Create uris for each language
|
||||
foreach($languages as $code => &$language)
|
||||
foreach($languages as $lang => &$language)
|
||||
{
|
||||
// If it's the current language
|
||||
if($code === Request::$lang)
|
||||
if($lang === Request::$lang)
|
||||
{
|
||||
// We only display it when required
|
||||
if($current)
|
||||
{
|
||||
$selectors[$code] = '<span class="multilang-selected multilang-'.$code.'">'.$languages[$code]['label'].'</span>';
|
||||
$selectors[$lang] = '<span class="multilang-selected multilang-'.$lang.'">'.$languages[$lang]['label'].'</span>';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$route = NULL;
|
||||
|
||||
// If it's the default route, it's unique and special (like you <3)
|
||||
if($current_route === 'default')
|
||||
{
|
||||
// We juste need to change the language parameter
|
||||
$route = Request::initial()->route();
|
||||
$params = array(
|
||||
'lang' => $code,
|
||||
);
|
||||
|
||||
if(!Kohana::config('multilang.hide_default') || Kohana::config('multilang.default') !== $lang)
|
||||
{
|
||||
$params['lang'] = $lang;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
$route = Route::get($name, $code);
|
||||
if(Arr::get(Route::all(), $lang.'.'.$name))
|
||||
{
|
||||
$route = Route::get($name, $lang);
|
||||
}
|
||||
}
|
||||
|
||||
$selectors[$code] = HTML::anchor($route->uri($params), $languages[$code]['label'], array('class' => 'multilang-selectable multilang-'.$code, 'title' => $languages[$code]['label']));
|
||||
if($route !== NULL)
|
||||
{
|
||||
$selectors[$lang] = HTML::anchor($route->uri($params), $languages[$lang]['label'], array('class' => 'multilang-selectable multilang-'.$lang, 'title' => $languages[$lang]['label']));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return View::factory('multilang/selector')
|
||||
// We display the menu only if we can select another language for this page
|
||||
if(count($selectors) > 1)
|
||||
{
|
||||
return View::factory('multilang/selector')
|
||||
->bind('selectors', $selectors);
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
|
@ -31,7 +31,7 @@ class Multilang_Request extends Kohana_Request {
|
|||
if(!Kohana::$is_cli)
|
||||
{
|
||||
// If we don't hide the default language, we must look for a language code for the root uri
|
||||
if(!Kohana::config('multilang.hide_default') && $uri === TRUE && Request::detect_uri() === '')
|
||||
if(Kohana::config('multilang.auto_detect') && $uri === TRUE && Request::detect_uri() === '')
|
||||
{
|
||||
$lang = Multilang::find_user_language();
|
||||
|
||||
|
@ -41,13 +41,22 @@ class Multilang_Request extends Kohana_Request {
|
|||
// Redirect to the root URI, but with language prepended
|
||||
header($protocol.' 302 Found');
|
||||
header('Location: '.URL::base(TRUE, TRUE).$lang.'/');
|
||||
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
$request = parent::factory($uri, $cache, $injected_routes);
|
||||
Request::$lang = $request->param('lang');
|
||||
|
||||
// If the default language is hidden, we manually set it
|
||||
if(Kohana::config('multilang.hide_default') && $request->param('lang') === NULL)
|
||||
{
|
||||
Request::$lang = Kohana::config('multilang.default');
|
||||
}
|
||||
else
|
||||
{
|
||||
Request::$lang = $request->param('lang');
|
||||
}
|
||||
|
||||
Multilang::init();
|
||||
return $request;
|
||||
}
|
||||
|
|
|
@ -18,6 +18,20 @@ class Multilang_Route extends Kohana_Route {
|
|||
*/
|
||||
static public function set($name, $uri_callback = NULL, $regex = NULL, $lang = NULL)
|
||||
{
|
||||
if(!Kohana::config('multilang.hide_default') || Kohana::config('multilang.default') != $lang)
|
||||
{
|
||||
if($lang !== NULL)
|
||||
{
|
||||
$uri_callback = '<lang>/'.$uri_callback;
|
||||
$regex['lang'] = $lang;
|
||||
}
|
||||
}
|
||||
|
||||
if($lang !== NULL)
|
||||
{
|
||||
$name = $lang.'.'.$name;
|
||||
}
|
||||
|
||||
return Route::$_routes[$name] = new Route($uri_callback, $regex, $lang);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,33 +33,26 @@ class Multilang_Routes {
|
|||
|
||||
$default_lang = Kohana::config('multilang.default');
|
||||
$languages = Kohana::config('multilang.languages');
|
||||
|
||||
// We first look for the default language uri which is obviously compulsory
|
||||
$default_uri = Arr::get($uris, $default_lang);
|
||||
if($default_uri === NULL)
|
||||
{
|
||||
throw new Kohana_Exception('The default route uri is required for the language :lang', array(':lang' => $default_lang));
|
||||
throw new Kohana_Exception('The default language route uri is required for the route: :route', array(':route' => $name));
|
||||
}
|
||||
else
|
||||
{
|
||||
// If we dont hide the default language in the uri
|
||||
if(!Kohana::config('multilang.hide_default'))
|
||||
{
|
||||
$default_uri = '<lang>/'.$default_uri;
|
||||
$regex['lang'] = $default_lang;
|
||||
}
|
||||
$routes->_routes[$default_lang.'.'.$name] = Route::set($default_lang.'.'.$name, $default_uri, $regex, $default_lang);
|
||||
|
||||
$routes->_routes[$default_lang.'.'.$name] = Route::set($name, $default_uri, $regex, $default_lang);
|
||||
}
|
||||
unset($languages[$default_lang]);
|
||||
|
||||
// Then we add the routes for all the other languages
|
||||
foreach($languages as $lang => $settings)
|
||||
{
|
||||
$uri = '<lang>/'.(Arr::get($uris, $lang) ? $uris[$lang] : $uris[$default_lang]);
|
||||
$regex['lang'] = $lang;
|
||||
$uri = (Arr::get($uris, $lang) ? $uris[$lang] : $uris[$default_lang]);
|
||||
|
||||
// For the uri, we use the one given or the default one
|
||||
$routes->_routes[$lang.'.'.$name] = Route::set($lang.'.'.$name, $uri, $regex, $lang);
|
||||
$routes->_routes[$lang.'.'.$name] = Route::set($name, $uri, $regex, $lang);
|
||||
}
|
||||
return $routes;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue