Allow users to change their Language via the Edit Profile page.
This commit is contained in:
parent
73ea94c7a2
commit
b99b09d13c
|
@ -66,22 +66,34 @@ class UserController extends Controller
|
|||
{
|
||||
$user = $_SESSION['phpci_user'];
|
||||
|
||||
$this->layout->title = $user->getName();
|
||||
$this->layout->subtitle = Lang::get('edit_profile');
|
||||
|
||||
if ($this->request->getMethod() == 'POST') {
|
||||
$name = $this->getParam('name', null);
|
||||
$email = $this->getParam('email', null);
|
||||
$password = $this->getParam('password', null);
|
||||
|
||||
$currentLang = Lang::getLanguage();
|
||||
$chosenLang = $this->getParam('language', $currentLang);
|
||||
|
||||
if ($chosenLang !== $currentLang) {
|
||||
setcookie('phpcilang', $chosenLang, time() + (10 * 365 * 24 * 60 * 60), '/');
|
||||
Lang::setLanguage($chosenLang);
|
||||
}
|
||||
|
||||
$_SESSION['phpci_user'] = $this->userService->updateUser($user, $name, $email, $password);
|
||||
$user = $_SESSION['phpci_user'];
|
||||
|
||||
$this->view->updated = 1;
|
||||
}
|
||||
|
||||
$this->layout->title = $user->getName();
|
||||
$this->layout->subtitle = Lang::get('edit_profile');
|
||||
|
||||
$values = $user->getDataArray();
|
||||
|
||||
if (array_key_exists('phpcilang', $_COOKIE)) {
|
||||
$values['language'] = $_COOKIE['phpcilang'];
|
||||
}
|
||||
|
||||
$form = new Form();
|
||||
$form->setAction(PHPCI_URL.'user/profile');
|
||||
$form->setMethod('POST');
|
||||
|
@ -107,6 +119,14 @@ class UserController extends Controller
|
|||
$password->setRequired(false);
|
||||
$form->addField($password);
|
||||
|
||||
$lang = new Form\Element\Select('language');
|
||||
$lang->setClass('form-control');
|
||||
$lang->setContainerClass('form-group');
|
||||
$lang->setLabel(Lang::get('language'));
|
||||
$lang->setRequired(true);
|
||||
$lang->setOptions(Lang::getLanguageOptions());
|
||||
$form->addField($lang);
|
||||
|
||||
$submit = new Form\Element\Submit();
|
||||
$submit->setClass('btn btn-success');
|
||||
$submit->setValue(Lang::get('save'));
|
||||
|
|
|
@ -19,6 +19,7 @@ class Lang
|
|||
{
|
||||
protected static $language = null;
|
||||
protected static $strings = array();
|
||||
protected static $languages = array();
|
||||
|
||||
/**
|
||||
* Get a specific string from the language file.
|
||||
|
@ -54,6 +55,31 @@ class Lang
|
|||
return self::$language;
|
||||
}
|
||||
|
||||
public static function setLanguage($language)
|
||||
{
|
||||
if (in_array($language, self::$languages)) {
|
||||
self::$language = $language;
|
||||
self::$strings = self::loadLanguage();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a list of available languages and their names.
|
||||
* @return array
|
||||
*/
|
||||
public static function getLanguageOptions()
|
||||
{
|
||||
$languages = array();
|
||||
|
||||
foreach (self::$languages as $language) {
|
||||
require(PHPCI_DIR . 'PHPCI/Languages/lang.' . $language . '.php');
|
||||
$languages[$language] = $strings['language_name'];
|
||||
}
|
||||
|
||||
return $languages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the strings for the currently active language.
|
||||
* @return string[]
|
||||
|
@ -69,6 +95,24 @@ class Lang
|
|||
*/
|
||||
public static function init(Config $config)
|
||||
{
|
||||
$matches = array();
|
||||
foreach (glob(PHPCI_DIR . 'PHPCI/Languages/lang.*.php') as $file) {
|
||||
if (preg_match('/lang\.([a-z]{2}\-?[a-z]*)\.php/', $file, $matches)) {
|
||||
self::$languages[] = $matches[1];
|
||||
}
|
||||
}
|
||||
|
||||
// Try cookies first:
|
||||
if (isset($_COOKIE) && array_key_exists('phpcilang', $_COOKIE)) {
|
||||
$language = $_COOKIE['phpcilang'];
|
||||
|
||||
if (in_array($language, self::$languages)) {
|
||||
self::$language = $language;
|
||||
self::$strings = self::loadLanguage();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Try user language:
|
||||
if (isset($_SERVER) && array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
|
||||
$langs = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
|
||||
|
@ -76,27 +120,26 @@ class Lang
|
|||
foreach ($langs as $lang) {
|
||||
$parts = explode(';', $lang);
|
||||
|
||||
self::$language = strtolower($parts[0]);
|
||||
self::$strings = self::loadLanguage();
|
||||
$language = strtolower($parts[0]);
|
||||
|
||||
if (!is_null(self::$strings)) {
|
||||
if (in_array($language, self::$languages)) {
|
||||
self::$language = $language;
|
||||
self::$strings = self::loadLanguage();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Try the installation default language:
|
||||
self::$language = $config->get('phpci.default_language', null);
|
||||
$language = $config->get('phpci.default_language', null);
|
||||
|
||||
if (!is_null(self::$language)) {
|
||||
if (in_array($language, self::$languages)) {
|
||||
self::$language = $language;
|
||||
self::$strings = self::loadLanguage();
|
||||
|
||||
if (!is_null(self::$strings)) {
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Fall back to en-GB:
|
||||
// Fall back to English:
|
||||
self::$language = 'en';
|
||||
self::$strings = self::loadLanguage();
|
||||
}
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
*/
|
||||
|
||||
$strings = array(
|
||||
'language_name' => 'English',
|
||||
'language' => 'Language',
|
||||
|
||||
// Log in:
|
||||
'log_in_to_phpci' => 'Log in to PHPCI',
|
||||
'login_error' => 'Incorrect email address or password',
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
*/
|
||||
|
||||
$strings = array(
|
||||
'language_name' => 'Français',
|
||||
'language' => 'Langue',
|
||||
|
||||
// Log in:
|
||||
'log_in_to_phpci' => 'Connectez-vous à PHPCI',
|
||||
'login_error' => 'Adresse email ou mot de passe invalide',
|
||||
|
|
|
@ -8,6 +8,9 @@
|
|||
*/
|
||||
|
||||
$strings = array(
|
||||
'language_name' => 'Pусский',
|
||||
'language' => 'язык',
|
||||
|
||||
// Log in:
|
||||
'log_in_to_phpci' => 'Войти в PHPCI',
|
||||
'login_error' => 'Неправильный email или пароль',
|
||||
|
|
Loading…
Reference in a new issue