여기서 볼 수있는 한 오해가 있습니다. 사용자 정의 리졸버/리소스 번들/기타를 사용하고 다른 모든 것을 제어 할 수있는 경우에는 locale-config
에서 아무 것도 구성 할 필요가 없습니다. 당신이 Add Resource Bundles Programmatically에서 답을 보면
, 당신은 OmniFaces Faces.getLocale()
가 된 ResourceBundle에 로케일을 전달하는 데 사용됩니다 참조
Locale userLocale = Faces.getLocale();
ResourceBundle b = ResourceBundle.getBundle("msgs", userLocale);
그래서 효과적으로 수행하는 것은, 그것을하지 자동적를 프로그램 적 선택한 지역을 통과하다 locale-config
에 구성된 항목을 사용하십시오.
IN Faces.getLocale()
일부 코드가 locale-config
를 사용하는 것이 존재하는 사실은 사람들이 뭔가 locale-config
구성이 때 일반 정상 JSF에서 예상대로 작동 그래서이 사용할 수 있는지 확인하는 것입니다. 16 번 줄에서는 사용자가 요청한 로켈을 보냅니다. 라인 18에서 그것은 (사용자 정의 구현에서 생략 할 수 있습니다!)를 supported-locale
에 대해이 점검되고 일치하는 경우 default-locale
(7-12 라인 수에 생략 할 수 있습니다)
1 /**
2 * {@inheritDoc}
3 * @see Faces#getLocale()
4 */
5 public static Locale getLocale(FacesContext context) {
6 Locale locale = null;
7 UIViewRoot viewRoot = context.getViewRoot();
8
9 // Prefer the locale set in the view.
10 if (viewRoot != null) {
11 locale = viewRoot.getLocale();
12 }
13
14 // Then the client preferred locale.
15 if (locale == null) {
16 Locale clientLocale = context.getExternalContext().getRequestLocale();
17
18 if (getSupportedLocales(context).contains(clientLocale)) {
19 locale = clientLocale;
20 }
21 }
22
23 // Then the JSF default locale.
24 if (locale == null) {
25 locale = context.getApplication().getDefaultLocale();
26 }
27
28 // Finally the system default locale.
29 if (locale == null) {
30 locale = Locale.getDefault();
31 }
32
33 return locale;
34 }
를 사용
그래서이 코드는 사용자가 응용 프로그램에서 선호 로케일을 구성했는지 여부와 브라우저에서 IF로 지원되는 로케일을 사용했는지를 먼저 확인하는 것을 포함하여 원하는대로 완전히 조정될 수 있습니다.
@Kukeltje : 불행히도 대답이 도움이되지 않습니다. 그러나 질문은 실제로 매우 유사하게 보인다. 나는 이미 모든 리소스를 내 자신의 논리로 해결했다. 브라우저 허용 언어 처리를 myfaces 구현에만 맡기를 바랐다. – Abaddon666
문제는 브라우저 언어와 자신의 설정을 사용하는 것을 선택하게하려는 것이다. 따라서 브라우저에서 보낸 로케일을 어떻게 든 처리해야합니다. 불행히도 Faces를 사용하여 이것을 수행하는 유일한 방법은 locale-config을 정의하는 것입니다.그렇지 않으면 우리는 요청에 의해 스스로를 추출해야합니다. – Abaddon666