웹사이트의 다국어버전?

mrlatte의 이미지

웹사이트개발하다보면 다국어버전이 필요한경우가있습니다.

보통 지금까지는 다른언어버전 페이지를 하나더 만드는 방법이였던거같은데

생각해보면 더좋은 방법이 있을법도하군요..

여러분의 의견을 듣고싶습니다.

세벌의 이미지

음... 어떤 걸 원하는 걸까요? 한글 페이지만 만들어 놓으면 다른 언어로 자동 변역되어 서비스?... 요즘 번역 시스템의 성능이 어떤지 모르겠지만 사람의 손이 가지 않으면 엉터리 번역이 되기 쉬울 듯.

일단 여러 나라 언어로 페이지를 만들어 놓고, 접속자의 아이피 주소를 보고 어느나라인지 알아내서 그 나라에 맞는 언어에 해당하는 페이지를 보여주는 기법은 이미 여러곳에서 쓰이는 걸로 알고 있습니다. 그게 어디더라??? -.-

cwryu의 이미지

IP를 보고 알아내는 게 아니라 브라우저의 언어 preference 설정에 따라 웹서버에서 다른 페이지를 보여주는 거죠..

데비안 홈페이지도 별 생각없이 쓰면 한글로 나오죠.

fender의 이미지

어느 정도 디자인과 컨텐츠가 고정되어 있는 경우라면 사용할 수 있는 방법이 몇몇 있습니다. 자바의 경우라면 Struts의 커스텀 태그나 자카르타 taglibs의 i18n태그 등을 활용해서 처리할 수 있습니다.

하지만 처음에 신중하게 고려해야 하는게 만일 나중에 로케일이나 언어별로 레이아웃이나 기타 내용이 크게 달라지거나 하는 부분이 있으면 아예 언어별 페이지를 따로 만드는게 속편할 때가 많다는 점입니다. 또한 개발자/디자이너 입장에서 비슷한 페이지 여러개를 유지보수 하는게 쉬울지, 혹은 페이지는 하나지만 커스텀 태그나 코드가 많이 들어간 페이지를 관리하는게 쉬울지 판단해야 합니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

다콘의 이미지

보통은 브라우저 설정으로 하겠지만 IP로도 할 수 있습니다.
http://www.maxmind.com/geoip/ 이런걸 쓰면 가능하죠.
접속한 국가명에 맞는 언어 페이지를 보여주게 하면 되죠.
맞는게 없다면 영문페이지를 보여주면 되겠고요.
하지만 별로 유용하지는 않는거 같네요. mysql.com 처럼 다운로드 미러 사이트
선택할때에나 좋은거 같습니다.

cwryu wrote:
IP를 보고 알아내는 게 아니라 브라우저의 언어 preference 설정에 따라 웹서버에서 다른 페이지를 보여주는 거죠..

데비안 홈페이지도 별 생각없이 쓰면 한글로 나오죠.

jedi의 이미지

ip로 하면 짜증나죠. 한국에 거주하는 미국사람은 어찌합니까?
미국에 거주하는 한국사람은 영어로만 봐야 합니까?
한국에 살면 모두 한글을 알까요?
일본에 살면 일본어를 알까요?

저는 그냥 국기를 쫘아악..... 펼쳐 놓은 곳이 가장 마음에 듭니다.

+++ 여기부터는 서명입니다. +++
국가 기구의 존속을 위한 최소한의 세금만을 내고, 전체 인민들이 균등한 삶을
영위할 수 있는 착취가 없는 혁명의 그날은 언제나 올 것인가!
-- 조정래, <태백산맥> 중에서, 1986년

차리서의 이미지

PHP에는 _() 등의 gettext 관련 함수가 있고, 가장 표준적인 NLS 시스템이 아닐까 합니다만, 저는 (gettext 체계에 불만이 있어서라기보다 제 필요에 딱 맞지 않아서) 나름대로 다른 방식(함수)을 설계해서 쓰고 있습니다. 설계 목표는

    + 독자의 웹 브라우저 언어 설정을 기초로 하여, 문서가 제공하는 언어들 중에서 가장 적합한 언어로 보여준다. + 문서가 제공하는 언어들의 목록 중에서 사용자가 원하는 언어를 선택할 수 있도록 하고, 이 선택 내용을 기억해서 계속 그 언어로 보여준다
입니다.

* 문서의 초기에 한 번만 하면 되는 작업들은:

만일 언어 선택과 관련하여 발급했었던 쿠키가 있다면 이 쿠키의 언어를 사용합니다. 만일 언어 선택 쿠키가 없다면 Accept-Language HTTP 헤더로부터 언어 목록과 각각의 qvalue들을 파싱해내고, (헤더 표준 스펙에 따라 qvalue 디폴트는 1.0으로 간주, *는 와일드카드로 간주), qvalue에 따라 정렬해서 최우선순위의 (즉, 가장 선호하는) 언어부터 하나씩 문서에서 제공하는 언어들의 목록에 있는지 비교하다가 발견되는 언어를 선택합니다. 필요하다면 언어 문자열(예를 들어 'en_US')에서 언어 부분과 국가 부분을 갈라내던가, 그대로 쓰던가 합니다. 만일 쿠키도 없고 언어 헤더도 비어있다면 디폴트 언어(정하기 나름)을 사용합니다.

기왕이면 로케일 설정을 해 두는 것이 여러모로 좋더군요. PHP에는 로케일에 따라 달리 움직이는 함수들이 많아서 요긴하게 쓰고 있습니다. 로케일 설정시 언어는 윗 단락에서 찾은 언어로, 문자 인코딩은 UTF8로 해두면 문자 인코딩에 신경쓰지 않고 유니코드 문서를 만들면 되므로 편할겁니다.

* 문서 내용을 작성할 때 할 일은:

먼저, 짧은 문자열을 언어별로 다르게 표시하기 위한 함수가 있습니다. string nls_(associative array) 함수는 인수로 들어온 배열 중에서 배열 키 문자열이 현재 언어에 해당하는 값을 리턴합니다. 예를 들어, nls_(array('ko'=>'로그인', 'en'=>'Login')); 입니다. 만일 인수 배열의 키 중에 현재 언어가 없다면 배열 중 맨 먼저 제시된 언어가 사용됩니다. 즉, 방금전 예의 함수는 중국어(zh) 사용자에게 '로그인'이라는 문자열을 제공합니다.

좀 더 긴 블럭을 언어별로 다르게 구성하려면 string nls_prin(string) 함수를 씁니다. 예를 들어

<?php if(nls_prin('ko,en') == 'ko') { ?>
한국어 문서는 이와 같이 제공됩니다.
<?php } else { ?>
No English document yet.
<?php } ?>

이 함수의 인수 문자열은 컴마를 기준으로 해석되고, 만일 현재 언어가 문자열 속에 들어있지 않으면 가장 왼쪽의 언어를 사용합니다. 이는 SQL 쿼리문 등을 만들 때에도 유용합니다.

마지막으로, string nls_lang([boolean]) 함수는 현재 언어를 문자열로 리턴합니다.

* 문제점

가장 큰 문제는 검색 크롤러입니다. 각 언어별 문서를 따로 만드는 방식과 달리, 이와같이 여러 언어를 하나의 문서 속에 스크립트로 만들어넣으면 검색 크롤러는 크롤러 고유의 언어나 웹사이트의 디폴트 언어로밖에 문서를 읽지 못합니다. 그나마, 제가 관찰해온 20여가지 크롤러들은 거의 모두가 Accept-Language 헤더가 비어 있거나 '*' 라는 와일드카드만을 사용하기 때문에, 결국 웹사이트 제작자가 설정한 디폴트 언어 한가지로만 긁어간다는 뜻이 됩니다.

저는 이 문제를 해결하기 위해 각종 크롤러들의 User-Agent 헤더를 정규표현식으로 저장해놓고, 만일 문서를 요청한 도구가 인간용 웹 브라우저가 아닌 검색 크롤러일 경우에는 언어에 상관 없이 모든 언어를 전부 concat 해서 보여주는 방안을 고려하고 있습니다.

* 마치며

당연히, 위에서 소개한 제 방식은 100% 만족스럽거나 완성된 방식이 아니며, 지금도 더 나은 방식을 계속 궁리하는 중입니다. 다른 분들의 의견이 많은 도움이 될 것입니다. :wink:

[/]

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!

신동익의 이미지

다국어 버전의 개발에 있어서 궁극적으로
자연어를 위한 중간언어,
즉 피봇(pivot)언어를 사용하여야 한다고 생각합니다.
한번 만들어 놓으면 어떤 언어로도 자연스런 번역이
가능한 언어 말입니다.

그러나 아직 이 피봇(pivot)언어가 아직 없기 때문에
이를 구현한 사이트나 프로그램은 아직 없는 걸로 알
고 있습니다.

이런 것이 만들어진다면 언어적인 혁명이 될 수 도 있겠지요!

2:^)

cjh의 이미지

아래 스레드가 참고가 되실 겁니다.

http://bbs.kldp.org/viewtopic.php?t=26206

--
익스펙토 페트로눔

fibonacci의 이미지

신동익 wrote:
다국어 버전의 개발에 있어서 궁극적으로
자연어를 위한 중간언어,
즉 피봇(pivot)언어를 사용하여야 한다고 생각합니다.
한번 만들어 놓으면 어떤 언어로도 자연스런 번역이
가능한 언어 말입니다.

그러나 아직 이 피봇(pivot)언어가 아직 없기 때문에
이를 구현한 사이트나 프로그램은 아직 없는 걸로 알
고 있습니다.

이런 것이 만들어진다면 언어적인 혁명이 될 수 도 있겠지요!

언어 고유의 뉘앙스를 표현할수 없는 정도의 기초적인 수준이라면
피봇언어를 만드는 것도 가능하리라 생각합니다.

No Pain, No Gain.