Skip to content

CHICPRO

  • Life Log
  • Cycling Log
  • Photo Log
    • Portrait
    • Landscape
    • Flower
    • Etc
  • Coding Log
  • Information

다국어 사이트에서 언어 처리

2020-08-05 by 편리
Pixabay로부터 입수된 Pexels님의 이미지 입니다.

주로 작업하는 사이트가 다국어 사이트이다 보니 기존 솔루션(예를 들면 그누보드 등)은 다국어 처리가 가능은 하지만 그럴려면 소스의 많은 부분을 수정해야만 하기 때문에.. 더구나 회사 홈페이지의 경우 회원 가입, 커뮤니티 활동 등은 필요가 없는 기능이기 때문에.. 더구나 게시글 역시 관리자 페이지에서 작성하는 경우가 많기 때문에 필요한 기능만 있는 자체 개발 솔루션을 사용하고 있다. 개발기간이 대략 3주 정도 걸리긴 했지만 일단은 편하게 사용할 수 있어서 좋은 것 같다.

사이트 언어처리는 php 배열을 이용해서 아래와 같은 구조를 가지고 있다.

<?php
$LANG = array(
    'ko' => array(
        'L001' => '올바른 방법으로 이용해 주십시오.',
        'L002' => '요청된 정보가 존재하지 않습니다.',
    ),
    'en' => array(
        'L001' => 'Please use it in the correct way.',
        'L002' => 'The requested information does not exist.',
    )
);

그리고 자바스크립트 등에서도 사용이 되기 때문에 php 배열을 그대로 사용할 수는 없고 아래와 같은 json 형태의 데이터를 생성해서 처리하도록 했다.

var LANG = {"ko":{"L001":"\uc62c\ubc14\ub978 \ubc29\ubc95\uc73c\ub85c \uc774\uc6a9\ud574 \uc8fc\uc2ed\uc2dc\uc624.","L002":"\uc694\uccad\ub41c \uc815\ubcf4\uac00 \uc874\uc7ac\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."},"en":{"L001":"Please use it in the correct way.","L002":"The requested information does not exist."}};
function _l($code, $lng = '')
{
    $LANG = $GLOBALS['LANG'];

    if (!isset($LANG) || empty($LANG))
        return '';

    if (!$lng)
        $lng = getSiteLanguage();

    if (!$lng) {
        $l = array_shift($LANG);
    } else {
        if (!isset($LANG[$lng]))
            $l = array_shift($LANG);
        else
            $l = $LANG[$lng];
    }

    return isset($l[$code]) ? $l[$code] : '';
}
function _l(code, lng)
{
  if (typeof(LANG) === "undefined" || Object.keys(LANG).length < 1)
    return "";

  if (typeof(cm_language) === "undefined")
    return "";

  if (!lng)
    lng = cm_language;

  var lk = Object.keys(LANG);

  var l;

  if (!lng) {
    l = LANG[lk[0]];
  } else {
    if (lk.indexOf(lng) == -1)
      l = LANG[lk[0]];
    else
      l = LANG[lng];
  }

  if (typeof(l) === "undefined")
    return "";

  return typeof(l[code]) !== "undefined" ? l[code] : "";
}

json 데이터를 별도로 생성해야하는가 생각할 수도 있지만 php 배열을 json_encode 함수로 처리만 해주면 된다. php 배열이 변경되면 파일 수정 시간을 체크해서 새로 json 데이터를 생성하면 편하다. 이제 사이트 방문자가 언어를 변경하겠다고 요청했을 때 처리하는 부분이 남았는데 언어 변경 후 다시 메인 등으로 이동하지 않고 방문한 페이지에서 처리되도록 하기 위해 아래와 같이 했다.

function changeLanguage(lng)
{
  var keys = Object.keys(LANG);

  var url = document.location.href;

  if (keys.indexOf(lng) == -1)
    document.location.reload();

    var sp = url.replace(/^https?:\/\//g, "").replace(/\/+/g, "/").split("/");

  if (keys.indexOf(sp[1]) != -1) {
    sp[1] = lng;
  } else {
    var sp1 = sp.slice(0, 1);
    var sp2 = sp.slice(1);

    sp = sp1.concat([lng], sp2);
  }

  document.location.href = window.location.protocol + "//" + sp.join("/");
}

언어 처리 기능이 충분한 테스트를 하지 못해서 오류가 있을 수도 있지만 크게 이런 식으로 처리를 하면 좋겠다 생각이 들어서 이렇게 작업을 진행하고 있다.

Post navigation

Previous Post:

워드프레스 템플릿 파일 덮어쓰기

Next Post:

MySQL에서 특정 row 기준으로 위 아래 row 구하기

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Recent Posts

  • SK 세븐모바일 유심 셀프교체
  • php 배열 연산에서 + 와 array_merge 의 차이
  • pcntl_fork 를 이용한 다중 프로세스 실행
  • 아이폰 단축어를 이용하여 주중 공휴일엔 알람 울리지 않게 하기
  • 구글 캘린더 전체일정 재동기화
  • OpenLiteSpeed 웹서버에 HTTP 인증 적용
  • OpenLiteSpeed 웹어드민 도메인 연결
  • WireGuard를 이용한 VPN 환경 구축
  • Ubuntu 22.04 서버에 OpenLiteSpeed 웹서버 세팅
  • 맥 vim 세팅

Recent Comments

  • 편리 on 업무관리용 그누보드 게시판 스킨
  • 임종섭 on 업무관리용 그누보드 게시판 스킨
  • 캐논 5D 펌웨어 | Dslr 펌웨어 업그레이드 방법 82 개의 베스트 답변 on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • Top 5 캐논 5D 펌웨어 Top 89 Best Answers on 캐논 EOS 30D 펌웨어 Ver 1.0.6 , EOS 5D 펌웨어 Ver 1.1.1
  • 편리 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 임팀장 on 워드프레스 애니메이션 gif 파일을 mp4로 변환하여 출력하기
  • 편리 on Notepad++ NppFTP 플러그인 수동 설치
  • paul-j on Notepad++ NppFTP 플러그인 수동 설치
  • YS on Windows 10 iCloud 사진 저장 폴더 변경
  • 편리 on Docker를 이용한 Centos7 + httpd + php 5.4 개발환경 구축

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org
© 2025 CHICPRO | Built using WordPress and SuperbThemes