Пример #1
0
/**
 * Here, we are connecting '/' (base path) to controller called 'Pages',
 * its action called 'display', and we pass a param to select the view file
 * to use (in this case, /app/views/pages/home.ctp)...
 */
// check installation
if (Sl::version() != SlConfigure::read('Sl.version')) {
    if (!preg_match('!/install|/users/login!', Sl::url(false))) {
        SlConfigure::write('Message.migrate', array('message' => __t('System files have been recently updated. Proceeding to database migration...'), 'params' => array('class' => 'message')));
        Router::connect(Sl::url(false), array('controller' => 'install', 'action' => 'migrate'));
    }
}
// localized routes
$langRules = array('lang' => implode('|', SlConfigure::read('I18n.langs')));
// home
$home = SlConfigure::read1('Routing.home');
Router::connect('/', $home);
Router::connect('/:lang', $home, $langRules);
// prefixed homes
$prefixedRoutes = SlConfigure::read('Routing.prefixes');
foreach ($prefixedRoutes as $prefix => $route) {
    Router::connect("/{$prefix}", $route);
}
// custom routes
$routes = SlConfigure::read('Routing.routes');
foreach ($routes as $expr => $route) {
    Router::connect($expr, $route);
    Router::connect("/:lang{$expr}", $route, $langRules);
}
Router::connect('/:lang/:plugin/:controller/:action/*', array(), $langRules);
Router::connect('/:lang/:controller/:action/*', array(), $langRules);
Пример #2
0
 /**
  * Set current language
  *
  * @param string $lang
  * @return bool Success
  */
 public static function setLocale($lang = null, $setCookie = false)
 {
     $locales = SlConfigure::read('I18n.locales');
     if (empty($locales)) {
         $languages = SlConfigure::read1('I18n.languages');
         $langs = array_keys($languages);
         $locales = array();
         $catalogs = array();
         if (!$langs) {
             $langs = array('en');
         }
         App::import('Core', 'l10n');
         $l10n = new L10n();
         foreach ($langs as $lang_) {
             $catalog = $l10n->catalog($lang_);
             if ($catalog) {
                 $catalogs[$lang_] = $catalog;
                 $locales[$lang_] = $catalog['locale'];
             }
         }
         $langs = array_keys($locales);
         SlConfigure::write('I18n.langs', $langs);
         SlConfigure::write('I18n.catalogs', $catalogs);
         SlConfigure::write('I18n.locales', $locales);
         if (empty($lang)) {
             $lang = SlCookie::read('I18n.lang');
             // guess language based on Accept-Language header
             if (empty($lang)) {
                 $envLangs = explode(',', env('HTTP_ACCEPT_LANGUAGE'));
                 foreach ($envLangs as $envLang) {
                     list($envLang) = explode(';', $envLang);
                     if (isset($locales[$envLang])) {
                         $lang = $envLang;
                         break;
                     }
                 }
                 if (empty($lang)) {
                     $lang = SlConfigure::read('I18n.lang');
                 }
             }
             // convert locale_id to lang_id
             $lang_ = array_search($lang, $locales);
             if ($lang_) {
                 $lang = $lang_;
             }
             if (empty($lang) || !isset($locales[$lang])) {
                 $lang = $langs[0];
             }
         }
     } else {
         $catalogs = SlConfigure::read('I18n.catalogs');
     }
     if ($lang) {
         // convert locale_id to lang_id
         $lang_ = array_search($lang, $locales);
         if ($lang_) {
             $lang = $lang_;
         }
         if (isset($locales[$lang])) {
             SlConfigure::write('I18n.lang', $lang);
             SlConfigure::write('I18n.catalog', $catalogs[$lang]);
             SlConfigure::write('I18n.locale', $locales[$lang]);
             Configure::write('Config.language', $locales[$lang]);
             if ($setCookie) {
                 SlCookie::write('I18n.lang', $lang, false, "+1 year");
             }
             SlConfigure::localeChanged();
             return true;
         }
     }
     return false;
 }