2012-01-26 4 views
2

내 응용 프로그램 사용자는 2 가지 로켈, EN 및 IT 중에서 선택할 수 있습니다. 브라우저에서 다른 언어를 사용하는 경우 영어를 자동으로 선택해야합니다. 맞습니까?Struts (1) 기본 로케일을 선택하지 않았습니다.

예를 들어 사용자가 프랑스어 브라우저를 사용하는 경우 프랑스어를 찾으려고하지만 프랑스어 로캘은 없으므로 페이지에 콘텐츠가 표시되지 않습니다.

그래서 질문은 다음과 같습니다. 기본 로캘을 선택하면 어떤 라이브러리 또는 프로세스가 응답합니까? 아마도 제 도서관이 시대에 뒤진 것입니까?

답변

0

브라우저에서 다른 언어를 사용하는 경우 영어를 자동으로 선택해야합니다. 맞습니까?

다릅니다. Struts는 가장 구체적인 메시지 번들을 찾은 다음 (예 : 언어 접미어가없는 기본 JVM 로켈 또는 메시지 번들과 같은) 일부 기본값으로 폴백합니다. Normally it's something like this :

base + "_" + localeLanguage + "_" + localeCountry + "_" + localeVariant 
base + "_" + localeLanguage + "_" + localeCountry 
base + "_" + localeLanguage 
base + "_" + default locale 
base 

는 ... 더 프랑스어 로케일이 없다, 그는 페이지에 어떤 내용을 표시합니다.

그럴 것 같지 않습니다. 메시지 키를 확인할 수 없으면 다음과 같은 예외가 발생합니다 : "키"누락 된 메시지 "..."로케일의 "..."로케일 ... " 또는 과 같은 결과가 표시됩니까?" ?? fr.yourKey ??? "을 struts-config.xml에 <message-resources ... null="false" />과 같은 구성으로 저장하면 페이지 또는 적어도 로그에 뭔가가 표시되어야합니다.

제 제안은 org.apache.struts.util.PropertyMessageResources에 대한 로그를 활성화하고 찾으려고하는 것입니다. 또한 .properties 파일을 확인하십시오. 키가 기본 파일에서 해석되고 비어있을 수 있습니다. (PropertyMessageResources가 운영 모드가 무엇을하고 있는지 떨어져에서) 현재 요청에 사용할 로케일을 선택하는 과정에 관해서는

은, 어떤 점에서 Struts의 요청 프로세서는 반환 할 책임이 org.apache.struts.chain.commands.servlet.SelectLocale에 호출합니다 장소.

이 클래스는 세션 내에서 캐시 된 로켈을 찾으려고 시도합니다. 하나를 찾을 수 없으면 요청에있는 것을 사용합니다. 거기에서 찾을 수 없으면 JVM 로케일을 기본값으로 사용합니다. 로캘이 세션에서 선택되고 캐시됩니다.

이것은 Struts 클래스이므로, struts-core JAR에서 찾을 수 있습니다. 사용하고있는 특정 버전의 Struts 소스 코드에 액세스 할 수 있다면 Locale이 어떻게 관리되는지 직접 볼 수 있습니다. Globals.LOCALE_KEY을 사용하는 코드는 나중에 사용하게 될 것입니다.

+0

내 질문에 차이가 있었지만, 내가 이미 알고있는 것을 설명해 주었다. –

+0

@Comodore Panamo : 답변을 일부 업데이트했습니다. 도움이되는지 확인하십시오. 그렇다면 어떤 종류의 대답을 찾고 있는지 알려주지 마십시오. – Bogdan

관련 문제