자바스크립트에서 다국어 지원을 위한, 라이브러리로 i18n 을 사용하다면,
다국어 text 정의는, 언어 key 와 언어 text 쌍의 json 파일로 관리가 된다.
i18n.t('key.key2.key3')
특정 key 를 현재 언어의 다국어 text 로 변환할때, 위와 같이 javascript 에서 사용하거나,
<span data-i18n='key.key2.key3'></span>
위와 같이 태그 안에서 직접 key 를 호출할 수 있다.
만약, 현재언어의 key.key2.key3 라는 키가 없다면, 대체 text 가 출력되거나, 기본 언어(default language) 의 key 를 찾아서, text 를 출력하게 된다.
누락된 key 가 있는지, 각 언어마다 빠진 데이터가 있는지를 찾아내기는 힘든일이다.
이때, 누락된 데이터가 나오면, 자동으로 알려준다면, 얼마나 쉽게 빠진 text 를 추가할 수 있겠는가..
i18n의 sendMissing 이라는 기능을 이용하면, 쉽게 누락데이터를 관리할 수 있다.
i18n 초기화 함수인 $.i18n.init 의 option 으로 아래와 같은 코드를 작성하면 된다.
sendMissing: true, // 번역데이터가 없을때 서버에 전송한다.
sendMissingTo: 'fallback',
웹서버는 닷넷이든 자바이든 상관없이, form 방식의 post 데이터를 받아서 처리하면 된다.
실제 서버로 전송되는 데이터는 name / value 의 form data 이고, 아래와 같은 형태이다.
key1.key2.key3=기본text
FORM 데이터의 name 값이 정해진 값이 아니라, key 값을 그대로 전송하기 때문에, form 객체에서 첫번째 항목을 읽어서 처리하면 되겠다.
실제 ASP.NET MVC 에서 Form ModelBinder 로 받아서 첫번째 항목을 DB 에 저장하는 소스이다.
사용하는 언어에 맞게 코딩하면 된다.
[HttpPost] public JsonResult I18nMissingKey_Insert([ModelBinder(typeof(FormRequestModelBinder))] JObject reqParam) { dynamic param = new { TKey = ((Newtonsoft.Json.Linq.JProperty)(reqParam.First)).Name, // Request 값중에 첫번째 값을 가져온다. DefaultValue = reqParam[((Newtonsoft.Json.Linq.JProperty)(reqParam.First)).Name].ToString(), LangCode = this.GetCurrentLang() }; SpotResult result = (new Biz_I18nMissingKey()).Insert(param); return Json(result); } |
|
아래 화면은 실제 DB 에 저장된, 누락데이터를 조회하고, 등록하는 기능이다.
각 언어별 json 파일로 분리해서 저장하고 있다.
위 코드는 누락된 i18n 데이터만을 관리하고 있지만,
실제, i18n 으로 번역 key / text 를 각각의 json 파일로 관리하는것은 쉽지가 않다.
이를 편하게 관리하기 위해, 각각의 json 파일을 merge 해서, 하나의 datatable 로 관리하도록 한 화면이다.
'개발팁' 카테고리의 다른 글
[vue.js] nested object 에 Observable 데이터 추가하기 (0) | 2018.12.14 |
---|---|
jquery 의 $.ajax 에 Promise 패턴 이용하기 (0) | 2018.11.07 |
[자바스크립트] JSON 객체를 브라우저에 캐시 하는 방법 (0) | 2018.05.10 |
C# Winform 파일 복사시 프로그레스바 표시하기 (0) | 2017.12.18 |
C# WinForm GroupBox 에 CheckBox Title 만들기 (0) | 2017.11.01 |