Add option to auto-select the language

This commit is contained in:
Kijin Sung 2016-03-06 14:50:55 +09:00
parent a1fc0e3c3b
commit 96154c8430
7 changed files with 45 additions and 10 deletions

View file

@ -275,7 +275,7 @@ class Context
if($this->lang_type = self::get('l'))
{
if($_COOKIE['lang_type'] != $this->lang_type)
if($_COOKIE['lang_type'] !== $this->lang_type)
{
setcookie('lang_type', $this->lang_type, $_SERVER['REQUEST_TIME'] + 3600 * 24 * 1000, '/');
}
@ -284,18 +284,31 @@ class Context
{
$this->lang_type = $_COOKIE['lang_type'];
}
elseif($site_module_info->default_language)
elseif(config('locale.auto_select_lang') && count($enabled_langs) > 1)
{
$this->lang_type = $this->db_info->lang_type = $site_module_info->default_language;
}
else
{
$this->lang_type = $this->db_info->lang_type;
if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
foreach($enabled_langs as $lang_code => $lang_name)
{
if(!strncasecmp($lang_code, $_SERVER['HTTP_ACCEPT_LANGUAGE'], strlen($lang_code)))
{
$this->lang_type = $lang_code;
setcookie('lang_type', $this->lang_type, $_SERVER['REQUEST_TIME'] + 3600 * 24 * 1000, '/');
}
}
}
}
if(!$this->lang_type || !isset($enabled_langs[$this->lang_type]))
{
$this->lang_type = 'ko';
if($site_module_info->default_language)
{
$this->lang_type = $this->db_info->lang_type = $site_module_info->default_language;
}
else
{
$this->lang_type = $this->db_info->lang_type ?: 'ko';
}
}
self::setLangType($this->lang_type);

View file

@ -38,6 +38,7 @@ return array(
'locale' => array(
'default_lang' => 'ko',
'enabled_lang' => array('ko'),
'auto_select_lang' => false,
'default_timezone' => 'Asia/Seoul',
'internal_timezone' => 32400,
),

View file

@ -529,6 +529,7 @@ class adminAdminController extends admin
}
Rhymix\Framework\Config::set('locale.default_lang', $vars->default_lang);
Rhymix\Framework\Config::set('locale.enabled_lang', array_values($enabled_lang));
Rhymix\Framework\Config::set('locale.auto_select_lang', $vars->auto_select_lang === 'Y');
// Default time zone
Rhymix\Framework\Config::set('locale.default_timezone', $vars->default_timezone);

View file

@ -376,6 +376,7 @@ class adminAdminView extends admin
Context::set('supported_lang', Rhymix\Framework\Lang::getSupportedList());
Context::set('default_lang', Rhymix\Framework\Config::get('locale.default_lang'));
Context::set('enabled_lang', Rhymix\Framework\Config::get('locale.enabled_lang'));
Context::set('auto_select_lang', Rhymix\Framework\Config::get('locale.auto_select_lang'));
// Site title and HTML footer
$oModuleModel = getModel('module');

View file

@ -65,8 +65,10 @@ $lang->about_lang_env = 'If you want to make the language setting same for first
$lang->xe_license = 'Rhymix complies with the GPL.';
$lang->yesterday = 'Yesterday';
$lang->today = 'Today';
$lang->default_lang = 'Select default language.';
$lang->lang_select = 'Select the supporting language(s).';
$lang->default_lang = 'Default Language';
$lang->lang_select = 'Supported Languages';
$lang->auto_select_lang = 'Auto-select Language';
$lang->about_auto_select_lang = 'Automatically select the language based on the language of each visitor\'s browser.';
$lang->about_recompile_cache = 'Delete useless or invalid cache files?';
$lang->confirm_run = 'It may take a long time. Do you want to run?';
$lang->use_ssl = 'Use <abbr title="Secure Sockets Layer">SSL</abbr>';

View file

@ -67,6 +67,8 @@ $lang->yesterday = '어제';
$lang->today = '오늘';
$lang->default_lang = '기본 언어 선택';
$lang->lang_select = '지원 언어 선택';
$lang->auto_select_lang = '언어 자동 선택';
$lang->about_auto_select_lang = '방문자의 브라우저 언어에 따라 자동으로 언어를 선택하는 기능입니다.';
$lang->about_recompile_cache = '쓸모 없어졌거나 잘못된 캐시파일들을 지우시겠습니까?';
$lang->confirm_run = '오랜 시간이 걸릴 수 있습니다. 실행하시겠습니까?';
$lang->use_ssl = '<abbr title="Secure Sockets Layer">SSL</abbr> 사용';

View file

@ -45,6 +45,21 @@
</label>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label">{$lang->auto_select_lang}</label>
<div class="x_controls">
<label for="auto_select_lang_y" class="x_inline">
<input type="radio" name="auto_select_lang" id="auto_select_lang_y" value="Y" checked="checked"|cond="$auto_select_lang" />
{$lang->cmd_yes}
</label>
<label for="auto_select_lang_n" class="x_inline">
<input type="radio" name="auto_select_lang" id="auto_select_lang_n" value="N" checked="checked"|cond="!$auto_select_lang" />
{$lang->cmd_no}
</label>
<br />
<p class="x_help-block">{$lang->about_auto_select_lang}</p>
</div>
</div>
<div class="x_control-group">
<label class="x_control-label" for="default_timezone">{$lang->timezone}</label>
<div class="x_controls">