На полусвязанной ноте, если Вы хотите запустить процесс, который имеет больше полномочий, чем Ваш текущий процесс (говорят, запуская приложение администрирования, которое требует прав Администратора из главного приложения, работающего как обычный пользователь), Вы не можете сделать настолько использующего CreateProcess () на Vista, так как это не инициирует диалоговое окно контроля учётных записей (предположение, что это включено). Диалоговое окно контроля учётных записей инициировано при использовании ShellExecute (), все же.
rchavik из IRC предложил эту ссылку: Переключение языка на основе URL-адреса CakePHP для интернационализации и локализации i18n и l10n
В общем, кажется, что переопределение Helper :: url
может быть решением.
По сути, это весь код, который я реализовал для решения этой проблемы в конце (по крайней мере, я думаю, что это все; -)):
/config/bootstrap.php
define('DEFAULT_LANGUAGE', 'jpn');
if (!function_exists('router_url_language')) {
function router_url_language($url) {
if ($lang = Configure::read('Config.language')) {
if (is_array($url)) {
if (!isset($url['language'])) {
$url['language'] = $lang;
}
if ($url['language'] == DEFAULT_LANGUAGE) {
unset($url['language']);
}
} else if ($url == '/' && $lang !== DEFAULT_LANGUAGE) {
$url.= $lang;
}
}
return $url;
}
}
/ config / core.php
Configure::write('Config.language', 'jpn');
/app_helper.php
class AppHelper extends Helper {
public function url($url = null, $full = false) {
return parent::url(router_url_language($url), $full);
}
}
/app_controller.php
class AppController extends Controller {
public function beforeFilter() {
if (isset($this->params['language'])) {
Configure::write('Config.language', $this->params['language']);
}
}
public function redirect($url, $status = null, $exit = true) {
parent::redirect(router_url_language($url), $status, $exit);
}
public function flash($message, $url, $pause = 1) {
parent::flash($message, router_url_language($url), $pause);
}
}
/config/routes.php
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
Router::connect('/:language/', array('controller' => 'pages', 'action' => 'display', 'home'), array('language' => '[a-z]{3}'));
Router::connect('/:language/pages/*', array('controller' => 'pages', 'action' => 'display'), array('language' => '[a-z]{3}'));
Router::connect('/:language/:controller/:action/*', array(), array('language' => '[a-z]{3}'));
Это позволяет URL-адресам по умолчанию, например / controller / action
, использовать значение по умолчанию язык (в моем случае - JPN) и URL-адреса типа / eng / controller / action
для использования альтернативного языка. Эту логику можно довольно легко изменить в функции router_url_language ()
.
Чтобы это работало, мне также нужно определить два маршрута для каждого маршрута, один из которых содержит /: language /
] параметр и один без. По крайней мере, я не мог придумать, как это сделать по-другому.