Allow users to change their Language via the Edit Profile page.

This commit is contained in:
Dan Cryer 2014-12-11 16:26:09 +00:00
parent 73ea94c7a2
commit b99b09d13c
5 changed files with 85 additions and 13 deletions

View file

@ -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'));

View file

@ -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();
}

View file

@ -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',

View file

@ -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',

View file

@ -8,6 +8,9 @@
*/
$strings = array(
'language_name' => 'Pусский',
'language' => 'язык',
// Log in:
'log_in_to_phpci' => 'Войти в PHPCI',
'login_error' => 'Неправильный email или пароль',