JSP/Servlet을 통해 다국어 지원을 제공하는 방법은 무엇입니까? 선택한 언어에 따라 런타임에 다른 언어의 정적 데이터를 포함하는 방법은 무엇입니까?JSP/Servlet의 언어 지원
답변
이 문제에는 몇 가지 중요한 측면이 있습니다. 첫 번째 부분은 각 요청의 로켈을 결정하는 것입니다. 다음과 같이 사용할 수 있습니다.
HttpServletRequest req ...;
String browserLocale = req.getHeader("Accept-Language"); // typically something like 'en'
다음으로 사이트의 현지화 된 콘텐츠를 관리하는 방법을 결정해야합니다. 가장 Java와 같은 (최선은 아님) 접근 방식은 ResourceBundle을 사용하여 모든 메시지를 외부화하는 것입니다. Isolating Locale Specific Data tutorial에서 I18N, G13N의 핵심 Java 기능에 대해 배울 수 있습니다.
이 접근법을 사용하는 것은 제 생각에는 매우 나쁩니다. 다른 언어의 콘텐츠 크기가 다르고 다르게 다른 레이아웃과 일치하는 등 리소스 번들을 완전히 제거 할 수 있습니다 (다중 로캘 데이터가 많지 않은 경우) 또는 XSLT 또는 로캘 인 다른 템플릿을 사용하여 접근 방식을 늘릴 수 있습니다 특유한.
성능이 뛰어나지 만 높은 개발 간접 접근법 중 하나는 서블릿 필터를 사용하여 트래픽을 언어 (또는 로켈) 특정 하위 사이트로 리디렉션하는 것입니다. 이 경우 http://my.domain.fake/xyz
을 타는 사람은 누구나 http://my.domain.fake/en/xyz
으로 리디렉션됩니다. 마지막으로 심각한 웹 프레임 워크의 대부분은 자체적 인 I18N 지원을 사용합니다. 그들의 접근 방식은 프레임 워크 철학에 따라 다릅니다.
"일반 바닐라"JSP/서블릿 애플리케이션에서 가장 좋은 해결책은 JSTLfmt taglib입니다. (방금 jstl-1.2.jar
을 /WEB-INF/lib
에 넣으십시오) 사용 방법은 Oracle Java EE 5 tutorial part II chapter 7과이 대답에서 다룹니다 : How to internationalize a Java web application?.
Oracle JSF 또는 Apache Struts와 같은 MVC 프레임 워크를 사용하는 경우 키워드 "internationalization"(i18n) 또는 "현지화"(l10n)를 사용하여 특정 설명서를 참조해야합니다. 대부분의 경우 JSF의 경우 <f:loadBundle>
(Oracle Java EE 5 tutorial part II chapter 15)의 특정 태그도 제공합니다.
i18n 태그는 이미 기본 언어/로케일을 ServletRequest#getLocale()
으로 확인합니다 (이전에 제안 된대로 머리글을 확인하여 "하위 수준"으로 할 필요는 없습니다. HTTP spec). 사용자가 언어 자체 (드롭 다운?)를 선택하고 세션 범위에 저장하도록하고 해당 taglib에 사용하도록 지시 할 수 있습니다. 여기에 JSTL의 FMT 태그 라이브러리와 예제입니다 :
<fmt:setLocale value="${someSessionBean.locale}" />
..where ${someSessionBean.locale}
등 en
, en_US
, en_UK
을 반환 할 수는 것들이다 (당신이 필요하지 않은 현지화 된 텍스트를로드 java.util.ResourceBundle
API에 의해 사용 차례 ResourceBundle
자체를 작성 /로드하십시오. taglibs는 이미 그렇게했으며, 링크 된 javadoc을 읽으면 작동 방식에 대해 좀 더 자세히 알 수 있습니다.) 당신이 URL의 최초의 PathInfo의 일부로 사용할 수있는 언어 (예 : 검색 엔진 최적화에 가장 적합 http://example.com/en/
로), 다음 가장 /*
에 수신하는 이것에 대한 Filter
사용하려는 경우
는의의 PathInfo을 확인 언어 부분을 분할 이를 세션 값으로 저장/비교하고 pathinfo의 언어 부분없이 요청을 원하는 프론트 컨트롤러로 전달합니다.
messages.properties, messages_를 만들 수 있습니까? ??.이 파일을/scr/java 디렉토리에 저장합니다. (여기서 ?? ?? - ko 페이지, ru_RU 등) messages.properties에
예 선 :
About = About
Buy = Buy
Company = Company
ContactUs = Contact Us
그럼 예 선용 JSP 파일에 붙여 : 지금
Locale locale = Locale.getDefault();
String lng = locale.getCountry();
session.setAttribute("language", lng);
if (lng.equals("UA"))
locale = new Locale("uk", "UA");
else if (lng.equals("RU"))
locale = new Locale("ru", "RU");
else
locale = Locale.US;
ResourceBundle boundle = ResourceBundle.getBundle("messages", locale);
for (Enumeration e = boundle.getKeys(); e.hasMoreElements();) {
String key = (String) e.nextElement();
String s = boundle.getString(key);
session.setAttribute(key, s);
}
다음 JSP 코드 ($ {About}, $ {Buy}, ...)에 $ {name}을 붙여 넣을 수 있습니다.
이것은 ** 당신이'ResourceBundle'과'Locale' 클래스를 사용하는 방식이 아닌 **입니다! 주제에 대한 기본적인 이해 부족을 보여줍니다. –
- 1. C# 아시아 언어 지원
- 2. .NET의 선언적 언어 지원
- 3. iPhone 지원 다중 언어
- 4. android에서 언어 지원
- 5. QT 다중 언어 지원?
- 6. Visual Studio 2010 언어 지원
- 7. ASP.net에 대한 어셈블러 언어 지원
- 8. 기능 언어 및 암기 지원
- 9. 여러 개의 인간 언어 지원
- 10. PHP에서 오른쪽에서 왼쪽으로 언어 지원
- 11. 자바 프로그램 지원 여러 언어
- 12. Solr 맞춤법 검사기 언어 지원
- 13. 다중 언어 응용 프로그램 - 커뮤니티 지원?
- 14. BASH 스크립트에 현지화 언어 지원 추가
- 15. 어디에 smalltalk 일본어 언어 지원 패키지
- 16. C# 동시 및 편집 가능한 언어 지원
- 17. Classic-Asp에 대한 다중 언어 지원
- 18. Visual Studio 2008 C++ 언어 지원?
- 19. CouchDB와의 상호 작용을위한 언어/프레임 워크 지원
- 20. SQL Server 다중 언어 데이터 지원
- 21. 아시아 언어 지원 질문에 대한 답변
- 22. 스핑크스 음성 인식 프로그램의 다른 언어 지원
- 23. Android에서 CTL (복합 텍스트 언어) 지원
- 24. 관계형 데이터베이스 서버 보조 프로그래밍 언어 지원
- 25. win 양식 응용 프로그램에서 아시아 언어 지원 추가
- 26. 음성 인식 : phenomes을 통해 사용자 정의 언어 지원
- 27. PHP/MySQL 웹 응용 프로그램의 페르시아 언어 지원
- 28. 얼마나 많은 언어 Wp7 키보드 지원 및 설정 방법
- 29. Android 3.2 OS에서 UTF-8 (위구르) 언어 지원 정보
- 30. 콘텐츠 지원 기능이있는 HTML5 기반 언어 편집기를 아는 사람이 있습니까?
이유 때문에 'ServletRequest.getLocale()'이 존재합니다! –