Improve time zone selection

This commit is contained in:
Kijin Sung 2016-02-03 17:54:47 +09:00
parent 3c8b586fac
commit e971e7a725
4 changed files with 51 additions and 13 deletions

View file

@ -157,15 +157,22 @@ class installController extends install
$config['locale']['enabled_lang'] = array($config['locale']['default_lang']);
// Set the internal and default time zones.
$user_timezone = intval(get_time_zone_offset($time_zone ?: '+0900') / 3600);
switch ($user_timezone)
if (strpos($time_zone, '/') !== false)
{
case 9:
$config['locale']['default_timezone'] = 'Asia/Seoul'; break;
case 0:
$config['locale']['default_timezone'] = 'Etc/UTC'; break;
default:
$config['locale']['default_timezone'] = 'Etc/GMT' . ($user_timezone > 0 ? '-' : '+') . abs($user_timezone);
$config['locale']['default_timezone'] = $time_zone;
}
else
{
$user_timezone = intval(get_time_zone_offset($time_zone ?: '+0900') / 3600);
switch ($user_timezone)
{
case 9:
$config['locale']['default_timezone'] = 'Asia/Seoul'; break;
case 0:
$config['locale']['default_timezone'] = 'Etc/UTC'; break;
default:
$config['locale']['default_timezone'] = 'Etc/GMT' . ($user_timezone > 0 ? '-' : '+') . abs($user_timezone);
}
}
$config['locale']['internal_timezone'] = intval(date('Z'));

View file

@ -145,11 +145,42 @@ class installView extends install
return $this->dispInstallCheckEnv();
}
Context::set('use_rewrite', $_SESSION['use_rewrite']);
// Get list of time zones.
$timezones = DateTimeZone::listIdentifiers();
natcasesort($timezones);
$timezones = array_combine($timezones, $timezones);
Context::set('timezones', $timezones);
// Automatically select a time zone for the user.
Context::set('selected_timezone', $this->detectUserTimeZone());
// Always use SSL if installing via SSL.
Context::set('use_ssl', RX_SSL ? 'always' : 'none');
Context::set('time_zone', $GLOBALS['time_zone']);
$this->setTemplateFile('other_config');
}
/**
* Detect best time zone for the user.
*/
function detectUserTimeZone()
{
switch (Context::getLangType())
{
case 'ko': return 'Asia/Seoul';
case 'en': return 'Europe/London';
case 'ja': return 'Asia/Tokyo';
case 'zh-CN': return 'Asia/Shanghai';
case 'zh-TW': return 'Asia/Taipei';
case 'de': return 'Europe/Berlin';
case 'es': return 'Europe/Madrid';
case 'fr': return 'Europe/Paris';
case 'mn': return 'Asia/Ulaanbaatar';
case 'ru': return 'Europe/Moscow';
case 'tr': return 'Europe/Istanbul';
case 'vi': return 'Asia/Ho_Chi_Minh';
default: return 'UTC';
}
}
}
/* End of file install.view.php */
/* Location: ./modules/install/install.view.php */

View file

@ -42,7 +42,7 @@
<label for="time_zone" class="x_control-label">{$lang->time_zone}</label>
<div class="x_controls">
<select name="time_zone" style="width:100%">
<option loop="$time_zone => $key,$val" id="{$key}" value="{$key}" selected="selected"|cond="$key==date('O')">{$val}</option>
<option loop="$timezones => $key,$val" value="{$key}" selected="selected"|cond="$key==$selected_timezone">{$val}</option>
</select>
</div>
</div>