0

나는 일반적인 디자인 문제가 있습니다.GWT의 클래스 필드 이름을 어떻게 현지화합니까?

GWT의 클래스 필드 이름은 어떻게 현지화합니까?

내가 상상 주석 콩을 상상해 같은

class Person 
{ 
    @LocalizedName(value = "{Person.name}") 
    String name; 

    @LocalizedName(value = "{Person.address}") 
    String address; 
} 

나는이 두 값이 지정 될 자원 영어 번들과 독일을해야합니다.

런타임의 어느 시점에서 필드의 이름 (예 : name)을 보유하는 Class<Person>String의 인스턴스를 갖습니다.

저는 어떻게 든 자동으로 현지화 된 버전을 원합니다.

나는 I can 내 내 Messages 인터페이스를 생성하고 getString()를 호출 알고 있지만 단지 쿨하지 지역화되고 그 클래스의 모든 필드에 대해 MyMessages.person_address()과 같은 복잡한 방법의 이름을 지정 필요하지만 또한 내가 재산의 이름을 변경하는 경우 휴식하는 경향이 리팩토링 중.

내가 오늘 어떻게하는지 그것은 아주 추악합니다.

아이디어가 있으십니까? 아마도 Generators을 사용할 수 있습니까? 다른 것 ? 어떻게 해?

답변

0

GWT에서 i18n을 수행하려면 내장 메커니즘을 사용해야합니다. Google의 앱은 일반적으로 GWT를 사용하여 320 개의 순열로 만들어 지므로이 방법은 많은 수의 i18n에서 효과적이므로 구현하기가 쉽지 않습니다.

옵션은 다음과 같습니다 인터페이스 파일 :(외부 문자열 속성 파일과

  • 메시지 인터페이스에서 하드 코드 된 문자열

    • 메시지 인터페이스 : | 태그
    • UiBinder, 지역화 된 문자열을 파일로 백업 :)

    나는 개인적으로 UiBinder 케이스를 사용합니다. 이제

    <ui:msg description="my great title">You're Title!</ui:msg> 
    

    를 컴파일 할 때, GWT 함께 문자열을 모두 수집하고이를 식별 : 당신은 위젯 (예 : 제목, 레이블, 등)에 문자열을 사용해야 할 때마다, 당신은 너무 같은 문자열을 포장 MD5 해시. 동일한 단어/구를 여러 번 사용하십시오. 발견 된 모든 고유 문자열에서 GWT가 동적으로 컴파일하는 i18n 등록 정보 파일에 한 번만 나타납니다. 이제 해당 파일을 번역하고 name_DE으로 이름을 바꿉니다. GWT는 독일어 순열에서 독일어에 대한 모든 영어 단어를 바꿉니다.

    참고 : 메시지 인터페이스 만 클래스에서 사용할 수 있습니다. 앱에서 동적으로 문자열을 업데이트 할 때이를 사용해야합니다.

    자세한 내용은 GWT i18n guide을 참조하십시오.

    Viel Glück.

  • +0

    의견을 남겨주셔서 감사합니다. UiBinder 템플릿의 국제화에 대해 알고 있습니다. 내가 사용할 게.하지만 질문은 콩/클래스의 현지화에 관한 것입니다. 그것은 다른 상황입니다. – expert

    +0

    당신의 질문을 잘 읽지 못했습니다. 제 수정 된 대답을보십시오. 콩/클래스에서 이렇게하는 것은 슬프게도 GWT i18n의 디자인이 아닙니다. –

    관련 문제