문제

나는 최근에 국제화되고 텍스트가 많은 Struts 1.1 웹 애플리케이션을 물려받았습니다.많은 JSP 파일은 다음과 같습니다.

<p>
    <bean:message key="alert" />
</p>

속성 파일은 다음과 같습니다.

messages.properties
alert=Please update your <a href="/address.do">address</a> and <a href="/contact.do">contact information</a>.

N개의 다른 언어로 적절한 번역이 있습니다(messages_fr.properties 등).

문제:

  1. 드라이 위반 - 내 Struts 작업 URL에 대한 참조가 1개가 아닌 N개 있어서 리팩토링 작업 URL에 오류가 발생하기 쉽습니다.
  2. 혼합된 우려 - 내 애플리케이션의 마크업이 이제 JSP 파일 이상의 영역에 있으므로 웹 전문가가 마크업(CSS 등을 사용하여)을 수정하기가 어렵습니다.
  3. 번역 후 마크업 - 새로 번역된 텍스트를 받을 때마다 무엇을 둘러쌀지 결정해야 합니다. <a>...</a> 마크업.영어에는 쉽지만 익숙하지 않은 언어에는 그렇지 않습니다.

메시지 파일에 다음과 같은 자리 표시자를 추가하는 것을 고려했습니다.

alert=Please update your {0} and {1}.

하지만 "주소"와 "연락처 정보"라는 단어를 현지화하고 마크업으로 래핑한 다음 내 메시지 태그에 전달해야 하는데 그렇게 하는 쉬운 방법이 없습니다.

이를 개선하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

긴 텍스트 블록 내에서 링크를 생성하지 마십시오.논리적으로 완전하고 독립적 인 링크 역할을 할 수있는 짧은 텍스트를 선호합니다.

일반적으로 문제가 덜 발생합니다.때로는 현지화를 수용하기 위해 UI 디자인을 타협해야 할 때도 있습니다.때로는 UI를 수용하기 위해 현지화 프로세스를 타협해야 할 때도 있습니다.

개발자가 번역 후 문자열을 수동으로 조작할 때마다 잠재적으로 비용이 많이 드는 버그가 발생할 수 있습니다.잘라내기/붙여넣기 또는 문자열 편집으로 인해 문자 손상, 잘못된 문자열 등이 발생할 수 있습니다.번역 결함은 수정을 위해 외부 당사자의 참여가 필요하며 비용과 시간이 소요됩니다.

생각해 보면 다음과 같은 것이 덜 추악할 수도 있습니다.

<p>Please update your address and contact information.
<br />
<a href="/address.do">update address</a>
<br />
<a href="/contact.do">update contact information</a></p>

...하지만 저는 UI 디자이너가 아닙니다.

다른 팁

염두에 두어야 할 한 가지 접근 방식은 번역된 대체 매개변수를 저장할 수 있다는 것입니다."주소" 및 "연락처 정보"는 로케일별로 하나씩 별도의 속성 파일에 있습니다.그런 다음 Action 클래스(또는 일부 도우미 클래스)가 현재 로케일에 대한 올바른 ResourceBundle에서 값을 찾아 메시지 태그에 전달하도록 합니다.

아마도:

#
alert=Please update your {0}address{1} and {2}contact information{3}.

메시지 메시지 태그 API는 5 개의 파라 메트릭 인수 만 허용합니다.

아!나는 Struts API에 대해 완전히 무지하다고 비난합니다.

인용하자면 수동:

이 taglib의 일부 기능은 Javaserver Pages 표준 태그 라이브러리 (JSTL)에서도 제공됩니다.Struts 팀은 가능한 경우 Struts 특정 태그를 통해 표준 태그를 사용하도록 권장합니다.

아마도 다음을 사용하여 이 작업을 수행할 수 있습니다. http://java.sun.com/jsp/jstl/fmt taglib.

<fmt:bundle basename="messages">
    <fmt:message key="alert">
        <fmt:param value='<a href="/">' />
        <fmt:param value="</a>" />
        <fmt:param value='<a href="/">' />
        <fmt:param value="</a>" />
    </fmt:message>
</fmt:bundle>

단점은 이것이 유효한 XML이 아니며 값을 변수에 끌어당기는 데 더 많은 간접 참조, 조회 및 자세한 정보가 필요하다는 것입니다.이는 좋은 해결책이 아닙니다.

나는 Struts를 모르지만 JavaServer Faces(동일한 설계자)와 같은 것이라면 아마도 대체 컨트롤 구성이 지원될 것입니다.기존 컨트롤을 보다 유연한 컨트롤로 교체하거나 새 컨트롤을 추가하겠습니다.

새로 번역 된 텍스트를받을 때마다 <a>...</a> 마크업.

이렇게 해서는 안 되며 저는 이것을 번역 과정의 결함으로 봅니다(저는 전직 현지화 엔지니어이자 전직 현지화 도구 개발자입니다).그만큼 {0} 번역자에게 전송되는 파일에는 문자가 포함되어야 합니다.지역화 지침에서는 문자열의 컨텍스트와 변수의 의미를 설명해야 합니다.

반환 시 속성 번들을 프로그래밍 방식으로 검증할 수 있습니다.문자열 관련 정규식이 트릭을 수행할 수 있습니다.번역 중에 "주소"와 "연락처 정보"의 순서가 바뀔 가능성은 없습니다.

가장 간단한 해결책은 렌더링할 메시지를 다시 디자인하는 것입니다.

<a href="/address.do">Please update your address.</a>
<a href="/contact.do">Please update your contact information.</a>

나는 이것이 모든 경우에 대한 해결책이 아닐 수도 있고 UI 디자이너가 이를 뱉어낼 수도 있다는 것을 인정합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top