2010-12-14 6 views
1

다음 문제에 대한 우아한 해결책을 찾고 있습니다.GWT - 엔티티 등록 정보의 국제화

데이터베이스에 미리 정의 된 (!) 엔티티가 있습니다. 이러한 엔티티에는 이름과 설명 (문자열)이 있습니다. 데이터 액세스 레이어 주변에는/etc를로드/검색 할 비즈니스 로직을 포함하는 일부 EJB가 있습니다. 그 실체들.

프론트 엔드의 경우 백엔드에서 EJB 메소드를 호출하는 GWT 애플리케이션을 개발 중입니다.

문제는 위에서 언급 한 엔티티의 이름과 설명이 국제화되어야한다는 것입니다. 예를 들어 사용자의 로켈에 따라 엔티티의 설명이 "멋진 설명"(영어) 또는 "Beschreibung bla"(예 : 독일어) 또는 무엇이든 :

첫 번째 방법은 데이터베이스에서 리소스 문자열을 사용하는 것이 었습니다. 따라서 엔티티 A는 description "descriptionA"를 가지고 있고, 엔티티 B는 description "descriptionB"을 가지고 있습니다 ... 나중에 GWT app (또는 다른 클라이언트)는이 리소스 문자열을 일종의 "리소스 번들"을 사용하여 실제 설명으로 변환합니다. 예 :

resources_en.properties * * 엔티티 A

descriptionB의

descriptionA = 실제 설명 엔티티 B = 실제 설명

resources_de.properties * *

descriptionA = 답변 A

descriptionB = 설명 B

엔티티는 미리 정의되어 있으므로 컴파일시 모든 설명을 "알 수 있습니다". 그러나 자원 번들이 응용 프로그램을 다시 컴파일하지 않고도 향상 될 수 있다면 더 좋을 것입니다.

GWT에서 가능합니까? 어떻게해야합니까? 서버 또는 클라이언트 측에서 "번역"하는 것이 더 좋습니까?

그렇지 않으면 백엔드 측면에서 모든 i18n 항목을 처리해야합니다. 이는 클라이언트 측에서 설명을 정의하는 대신 데이터를 함께 유지하는 것을 허용합니다. 그러나 큰 단점은 백엔드가 발신자의 지역을 알아야한다는 것입니다.

안부, 프랭크

답변

0

주로 유연성 대 다운로드 시간/속도의 결정입니다. 컴파일하면 GWT가 메시지를 인라인하고 조금 더 빠른 코드를 생성 할 수 있습니다. 문자열 조회가 필요 없기 때문입니다. 그러나 변경이 필요하고 다시 컴파일하거나 사용자가 메시지를 동적으로 변경할 수 있도록하려는 경우 동적 메시지가 필요합니다. 후자의 경우에 대해서는

이 당신을 도울 수있는 Dictionary 클래스는, 참조 : http://code.google.com/webtoolkit/doc/latest/DevGuideI18n.html#DevGuideDynamicStringInternationalization 을 사전 사용하면 정적 페이지에서 사용자에게 제공하는 모든 메시지를 생성합니다. 사용자 로캘은 페이지가 요청 될 때 브라우저가 보내는 Accept-Language 헤더에서 찾을 수 있습니다.

어떤 경우 (컴파일 또는 동적) 어떤 구성 등록 정보에서 사용자가 설정 한 로케일을 제공 할 수 있으며이 경우에도 사용자에게 로켈을 제공하기 위해 서버 측에서 두 경우에 대한 논리가 필요합니다.

0

모든 ... 시도하는 사람들을 위해 위로의 질문에

수 있습니다 : 당신의 문제를 해결하는 방법에는 여러 가지가 있습니다. 하나는 i18n 외관을 소개하고 설명과 이름을 리소스 키로 취급하는 것입니다. 그런 다음 번역에 액세스하기위한 편리한 방법, 즉 public String translate(String message, Locale locale);을 정의 할 수 있습니다. 이 메소드는 표준 Java ResourceBundle 클래스를 사용하여 런타임에 자원에 액세스 할 수 있습니다.

내가보기에 유일한 진짜 문제는 복합 메시지 (예 : '어쩌구, 4 가지 항목', 4는 자리 표시 자)를 처리하는 방법입니다. 우리가 유사한 상황에서 한 프로젝트에서 한 것은 구분 기호와 실제 자원 키를 추가하고 다른 구분 기호와 카운트를 추가 한 것입니다 : "blah, blah 4 items ## items.in.your.whatever ## 4". 영어의 경우 첫 번째 부분을 간단하게 다듬을 수 있으며 다른 언어의 경우 전체 문자열을 처리해야합니다.