2012-05-03 2 views
0

누군가가 로케일 핀란드어가 작동하지 않고 나머지가 왜 나에게 말할 수 있습니까?Java에서 로케일 -object (핀란드어 등)를 생성하는 올바른 방법은 무엇입니까

private static Map<String,Object> countries; 
    private static Locale finnishLocale = new Locale("fi", "FI"); 

static{ 
    countries = new LinkedHashMap<String,Object>(); 
    countries.put("English", Locale.ENGLISH); //label, value 
    countries.put("French", Locale.FRENCH); 
    countries.put("German", Locale.GERMAN); 
    countries.put("Finnish", finnishLocale); <---------- Not working! 
} 

public void setLocaleCode(String localeCode) { 


       this.localeCode = localeCode; 
       updateLocale(localeCode);   


     } 


public void updateLocale(String newLocale){ 

     String newLocaleValue = newLocale; 

     //loop country map to compare the locale code 
       for (Map.Entry<String, Object> entry : countries.entrySet()) { 

       if(entry.getValue().toString().equals(newLocaleValue)){ 

       FacesContext.getCurrentInstance() 
        .getViewRoot().setLocale((Locale)entry.getValue()); 

       } 
       } 

     } 

는 내가 새로운 절을 사용하여 만든 로케일이 작동하지 않는 것을 의미한다. 내가 더 잘 설명 할 수는 없기 때문에, 마치 Locale.GERMAN과 비슷한 Locale-object가 구현 된 로케일이라고 생각했기 때문에? 내 소프트웨어는 로캘을 업데이트하는 것 외에는 아무것도하지 않습니다. ja 얼굴 컨텍스트. 예외는 없습니다. q가 바보라면 미안 해요. 다른 모든 것은 작동합니다. 독일어, 영어 등을 의미하며 프로그램은 로캘과 얼굴 컨텍스트를 업데이트합니다.

당신이 질문에 대답하면 내가 대단히 감사하겠습니다

, 나는 손실 (다시) 사미

+2

"* not workin *"은 내가 본 컴파일러 또는 런타임 오류가 아닙니다. –

+0

@house_no_name, "NotWorkingException"에 대해 들어 본 적이 없다는 사실에 놀랐습니다. Exception, Error, UserStupidity, EndOfWorld 등의 상위 클래스입니다. –

답변

4

귀하의 updateLocale() 방법에 보인다 범인이 되십시오. Locale#toString()newLocale을 비교합니다. Locale 상수에는 국가가 아닌 언어 집합 만 있습니다. Locale.ENGLISH.toString()은 예를 들어 "en"을 반환하고 new Locale("fi", "FI").toString()"fi_FI"을 반환합니다. 이는 실제로 newLocale 변수가 "en", "fr", "de""fi"을 포함한다는 것을 의미 할 수 있습니다. 첫 번째 3 개는 상수와 일치하지만, 후자는 대신 toString()과 비교하기 때문에 finnishLocale과 일치하지 않습니다.

문제, Map<String, Locale>Map<String, Object>을 변경 한 다음 변경

private static Locale finnishLocale = new Locale("fi", "FI"); 

더 나은

private static Locale finnishLocale = new Locale("fi"); 

또는,

중 하나 변화를 해결하려면

if(entry.getValue().toString().equals(newLocaleValue)){ 

to

if(entry.getValue().getLanguage().equals(newLocaleValue)){ 

이지도 루프는 다소 서툴 릅니다. newLocale이 서버 측에서 제어하는 ​​값인 경우 viewRoot.setLocale(new Locale(newLocale))을 대신 입력하십시오.

+0

많은 관심, kiitos paljon! FacesContext.getCurrentInstance(). getViewRoot().setLocale (새 로케일 (localeCode)); 그것은 내가 부끄러워하는 너무 깔끔하고 깨끗한 해결책이었습니다 :) 20 줄의 코드에서 1 줄로 ... 배우는 것이 너무나 많습니다. 사미 – Sami

+0

당신은 환영합니다 :) – BalusC

2

이 작품 이후로 당신은 다른 곳에서 오류가 있습니다

public class Runner01 { 
private static Map<String,Object> countries; 
private static Locale finnishLocale = new Locale("fi", "FI"); 

static{ 
    countries = new LinkedHashMap<String,Object>(); 
    countries.put("English", Locale.ENGLISH); //label, value 
    countries.put("French", Locale.FRENCH); 
    countries.put("German", Locale.GERMAN); 
    countries.put("Finnish", finnishLocale); 
} 

public static void main(String[] args) { 
    for(Map.Entry<String, Object> entry : countries.entrySet()) { 
     System.out.println(entry.getKey() + "=>" + entry.getValue().toString()); 
    } 
} 


} 
+0

좋습니다, 감사합니다. 나는 그것을 풀려고 노력할 것이다. 나는 JSF 페이지에서 직접 setter를 사용하고있다 :

Sami

+0

당신도 역시 고마워, 이제는 작동 중! – Sami

관련 문제