Rails로 다중 언어 지원 애플리케이션 만들기

| 2015. 1. 18. 20:33

심심한 날, 친구가 필요한 날, 나는 나는 내 개인 웹사이트카페 연두의 웹사이트를 조금씩 손봐서 업데이트하곤 한다. 카페 연두의 웹사이트는 그야말로 내 취미에서 시작한 프로젝트인데 그래서 아무 생각없이 영어로만 내용을 채웠다. 하지만 막상 만들고보니 그럭저럭 쓸 만한 것이 된 것 같아 각종 포털 사이트에 등록을 하려고 했는데 그러고보니 너무 내용이 영어 일색이더라. 레일스라면 손쉽게 다중 언어 지원도 가능할 것이라고 생각했다.

사실 다중 언어를 지원하는 웹사이트를 만들어본 것은 처음이 아니다. 예전에 MMC 2014 웹사이트를 만들 때도 한 번 작업해본 적이 있다. MMC 웹사이트는 AngularJS를 기반으로 만들어졌는데 처음부터 한글과 영어를 지원하게끔 디자인되어 있었고 그 외의 언어를 지원해야 할 가능성 자체가 없었기 때문에 텍스트든 이미지든 영어와 한글 버전을 따로 변수 지정해 해당 변수를 토글하는 식으로 제작했다.

레일스 같은 백엔드 프레임워크에는 좀 더 체계화된 언어 지원 기능이 있다. 레일스는 그 중에서 i18n이라는 젬을 사용, 레일스에서 지원하는 지역 설정(locale)을 기반으로 텍스트 짝을 맞추는 기능을 지원한다. 비록 레일스 3.2 버전에 대한 매뉴얼이긴 하지만 xyzpub.com의 Multilingual Rails Application이라는 글을 참고하면 대충 레일스에서 다중 언어 지원 애플리케이션을 어떤 식으로 구성할 수 있는지 감을 잡을 수 있다. 사실 백엔드 프레임워크에서 한 번이라도 비슷한 기능을 만들어봤다면 아마 손쉽게 이해할 수 있을 것이다. 조금 복잡한 기능, 예를 들어 사용되는 언어와는 무관하게 공통으로 들어가는 숫자 또는 HTML 태그 등을 삽입하는 기능 또한 레일스에서 제공한다.

조금 까다로운 것은 DB에 저장되어 있는 값들을 다른 언어로 지원하는 작업이다. 하지만 이미 탄탄한 개발 커뮤니티가 갖춰진 레일스에서 해당 기능을 쉽게 구현해놓은 젬을 찾는 것은 어렵지 않은 일이다. 나는 Globalize라는 젬을 사용했다. 사용법은 간단하다. 해당 젬을 설치하고 번역이 필요한 모델에 옵션을 추가한 뒤, 정해진 문법에 따라 마이그레이션으로 실제 번역된 값들이 저장될 테이블을 만들고 역시 정해진 문법에 따라 값을 저장하고 뽑아내면 된다. 사실 값을 뽑아내는, 그러니까 출력하는 부분은 i18n의 지역 설정과 동일하게 처리되게 때문에 따로 신경을 쓸 필요가 없다.

현재 나의 상황에서는 이 두 가지 경우 외에 언어에 대해 처리를 하는 코너 케이스가 없다. 이렇게 간단하게 다중 언어 지원 애플리케이션이 만들어졌다.

후후. 이렇게나 간단하다니 진작에 레일스를 배울 걸.