다국어 사이트 제작중 질문
본문
제품 기본 설명을 언어별로 다르게 출력하고 싶은데
db에서 it_en 필드를 it_jp 추가해서 영어 설명을 넣어 보았습니다.
it_basic --> 한국어 기본설명
it_jp --> 일본어 기본설명
it_en --> 영어 기본설명
상품관리페이지에서 각언어별로 저장은 되구요. 이제 item.form.skin 에서 출력해야되는데
<p id="sit_desc">
<?php echo $it['it_basic']; ?></p>
번역언어를 감지해서 (접속국가가 한국이면 한국어로 출력, 일본이면 일본어 그외면 영어로 출력하고 싶습니다. ) 또는 국가 링크를 넣어서 출력하고 싶은데
if 문으로 아래처럼 표현해야하는지 궁금합니다.
$site_lang = $_GET['lang'];
if($site_lang != ''){
if($site_lang != 'en'){
$echo $it['it_en']; ?
}else if
($site_lang != 'ja'){
$echo $it['it_jp']; ?
}else{
$echo $it['it_basic']; ?
}
}
고수님들 의견 부탁드립니다. 감사합니다.
답변 2
단순히 사용자 IP 로 부터 국가코드를 알아내는 방법중 하나입니다.
<?php
function langinfo($ipaddr) {
$lang = 'basic';
$url = 'http://www.geoplugin.net/php.gp?ip=' . $ipaddr;
$info = file_get_contents($url);
if (empty($info) == false && substr($info, 0, 2) == 'a:') {
$info = unserialize($info);
$lang = strtolower($info['geoplugin_countryCode']);
}
return $lang;
}
function langcustom($ipaddr) {
$lang = langinfo($ipaddr);
if ($lang != 'jp' && $lang != 'kr') {
$lang = 'en';
}
if ($lang == 'kr') {
$lang = 'basic';
}
return 'it_' . $lang;
}
$ipaddrs = [
'1.0.0.0', // USA. au
'1.1.1.0', // USA. au
'100.128.0.0', // USA. us
'8.8.8.8', // USA. us
'1.0.16.0', // Japan. jp
'1.11.0.0' // Korea. kr
];
echo '<pre>';
foreach ($ipaddrs as $ipaddr) {
$cc = langinfo($ipaddr);
echo str_pad($ipaddr, 15) . ' : ' . $cc . PHP_EOL;
}
/*
1.0.0.0 : au
1.1.1.0 : au
100.128.0.0 : us
8.8.8.8 : us
1.0.16.0 : jp
1.11.0.0 : kr
*/
echo '<hr />';
foreach ($ipaddrs as $ipaddr) {
$cc = langcustom($ipaddr);
echo str_pad($ipaddr, 15) . ' : ' . $cc . PHP_EOL;
}
/*
1.0.0.0 : it_en
1.1.1.0 : it_en
100.128.0.0 : it_en
8.8.8.8 : it_en
1.0.16.0 : it_jp
1.11.0.0 : it_basic
*/
echo '</pre>';
?>
www.geoplugin.net 에서 정보를 얻는동안 지연시간이 짧지는 않습니다.
속도가 중요할 경우 다른 솔루션이나 상용솔루션을 검색해보시면 될것 같고
접속자의 국가정보를 얻기 위해
langinfo($_SERVER['REMOTE_ADDR']); 의 형태로 호출해볼수 있는데
요청헤더에 XFF(X-Forwarded-For) 관련 헤더 필드가 있는 경우 적당히 참조하도록 수정할 필요는 있습니다.
!-->
switch($_GET['lang']):{
case 'en';{
echo $it['it_en'];
break;
}
case 'ja_JP':{
echo $it['it_jp'];
break;
}
default:{
echo $it['it_basic'];
break;
}
}
답변을 작성하시기 전에 로그인 해주세요.