2011-10-16 6 views
3

지금까지 저는 (jQuery UI로 작성된) JavaScript 응용 프로그램의 i18n 및 l10n에 Globalize을 사용하고 있습니다. 이 작동하지만 내 코드를 다른 특정 라이브러리에 연결합니다. 지금 나는 i18n을 지원하지 않는 소스를 재사용하기 때문에이 문제를 극복 할 방법을 찾고 있습니다. 나는 이것을 바꾸지 않을 것입니다. 모든 구현을 플러그인 할 수있는 i18n 용 글로벌 인터페이스를 사용하는 것에 대해 이야기하는 것이 아닙니다. 요약 : i18n 및 l10n 지원을 소스를 변경하지 않고 기존 응용 프로그램에 추가하려면 어떻게합니까? 나는 이것이 좋은 생각인지 묻지 않고, 이것이 가능하고 어떻게 할 수 있는지 묻고있다.기존 JavaScript 응용 프로그램의 국제화 및 현지화

지금까지 나는이 방법을 마련했지만, 모두가 자신의 결함이 : 나는 jQuery를 (내 경우에는 내가 할 수있는)의 사용에 의존하고 싶다면

  1. 을, 나는 대체 할 수 text/val/append 등의 메소드, 즉 DOM을 조작하는 모든 메소드. 그러나 이들 중 상당수가 있으며, 모두가 조금 다르게 행동합니다. 나는 또한 이것을 한발 더 나아가 DOM 방법을 대체 할 수있다.

  2. DOM을 걷고 텍스트 노드와 양식 값을 바꿉니다. 이것은 효과가 있지만 비싸고 동적 인 변화는 표준화 된 방법이 없기 때문에 탐지하기가 어렵습니다.

이러한 것들은 i18n 문제에 대한 부분적인 해결책을 제공하지만, 이것도 어느 ​​것도 작동하지 않을 수 있습니다.

기존 앱에 i18n 및 l10n 지원을 추가하는 문제에 어떻게 접근합니까?

답변

2

짧은 대답 : 그것을 소스를 변경하지 않고 응용 프로그램 에 국제화 지원을 추가 할 수있는 방법이 없습니다
.

제가 자세히 설명해 드리겠습니다. i18n으로해야 할 일은 다음과 같습니다.

  1. 외부화 문자열입니다.
  2. 유효한 로캘에 따라 날짜, 시간, 숫자 등을 포맷합니다.
  3. 특정 로캘에 따라 사용자 입력 (즉, 날짜, 시간, 숫자)을 수락합니다.
  4. 문화적 바이어스를 올바르게 처리합니다 (예 : 색상, 이미지, 소리 수정). 이러한 것들의

없음 수정 소스 코드없이 을 수행 할 수있다. 죄송합니다.

Ad1. 외부화 문자열은 쉬운 것처럼 보입니다. 맞습니까? DOM을 살펴본 후 모든 인스턴스를 번역 된 텍스트로 바꾸십시오.
아니요, 그렇지 않습니다. 첫째, 자바 스크립트 기반 오류 또는 정보 메시지 (예 : alert() 함수를 통해)와 같이 액세스 할 수없는 텍스트가있을 수도 있습니다. 이것은 DOM에 액세스 할 수 없습니다. 둘째, 복합 메시지가 항상 있습니다. 즉, 숫자를 입력합니다 ("검색어와 일치하는 12 개의 레코드"). 번역 할 때 문장의 순서를 바꾸는 것이 일반적입니다 (즉, 번호가 마지막에옵니다). 각 문장을 숫자 나 날짜로 분석하고 특별히 처리해야합니다. 그리고 가변 문자열을 넣으면 어떨까요? 이 상황을 극복하는 방법 (특히이 문자열이 시간이 지남에 따라 변경 될 수있는 경우)?

Ad2.& Ad3. 포맷팅과 파싱은 쉽습니다. 네, 로케일을 아는 분은 입니다. 불행하게도, 로케일을 감지하는 유일한 방법은 서버 측 (Accept-Language 헤더에서)에서하는 것입니다. 클라이언트 측 지원은 사실상 존재하지 않거나 (많은 브라우저의 경우) 심각하게 손상됩니다 (다른 경우). 따라서 어떤 로케일을 사용할 지조차 알지 못합니다. 기본 자바 스크립트를 수정할 수없는 지역 날짜를 어떻게 받아들입니까?

Ad4. 다양한 색상에 대한 지원은 가능하지만 유일한 방법은 각 DOM 요소에 대해 수동으로 설정하는 것입니다. 좋은 결과 내길 바랄 게. 추가 이미지 또는 사운드를 추가하려면 이론적으로 올바른 디렉토리에 배치하고 DOM을 수정해야 적절한 이미지가 사용됩니다. 다시 한번, 행운을 빈다.

기본적으로 노력의 양을 줄이려고합니다. 실제로 비표준 솔루션을 구현하여 (사실 업계 표준이 제시하는 것은 아니지만) 결국 의 작업이 이루어 지거나 i18n 지원이 좋지 않음을 알 수 있습니다.

+0

좋은 예입니다. 내 마음을 정리해 줘서 고마워. –

관련 문제