2011-03-30 3 views
3

공백을 밑줄로 변환하지 않아도 기존 텍스트를 키로 변환하는 것이 더 쉽기 때문에 메시지 묶음 키에 공백을 넣을 수 있기를 원합니다.메시지 번들 키의 공백

봄 메시지 원본 does not는 이것을 좋아하는 것처럼 보입니다. 그것은 가능한가?

2011-03-30 15:45:56,519 ERROR [org.springframework.web.servlet.tags.MessageTag] - No message found under code 'Invalid username or password' for locale 'en_US'. 
javax.servlet.jsp.JspTagException: No message found under code 'Invalid username or password' for locale 'en_US'. 
    at org.springframework.web.servlet.tags.MessageTag.doStartTagInternal(MessageTag.java:183) 

답변

12

.properties 리소스 번들을 통해 메시지를 저장하는 경우 키의 공백 앞에 백 슬래시를 추가해야합니다.

Invalid\ username\ or\ password=Invalid username or password 

은 위키 백과에서 속성 파일의 예를 참조하십시오

http://en.wikipedia.org/wiki/.properties이 문제를 가지고 다른 사람에 대한

# Add spaces to the key 
key\ with\ spaces = This is the value that could be looked up with the key "key with spaces". 
+0

재미 있지 않습니다! 내 번들을 특성 파일 이외에 저장할 수 있습니까? – mkoryak

+0

http://download.oracle.com/javase/6/docs/api/java/util/ResourceBundle.html#getBundle%28java.lang.String,%20java.util.Locale,%20java.lang.ClassLoader를 확인하십시오. , % 20java.util.ResourceBundle.Control % 29. 리소스 번들이로드되는 방법과 다른 형식을 정의하는 방법에 대해 설명합니다. –

1

가 여기에 내가 공간을 해결하기 위해 쓴 작은 해키 그루비입니다 :

@Test 
    void fixMessageBundle(){ 
     def path = "/path/to/it/messages_en_US.properties"; 
     String fixed = ""; 
     Map keys = [:] 
     new File(path).eachLine { String it-> 
      String line = ""; 
      if(it.contains("=")){ 
      String key = it.split("=")[0]; 
      String val = it.split("=")[1]; 
      if(keys.containsKey(key)){ 
       println "removed duplicate key: ${key}. kept val: [${keys[key]}], threw out val: [${val}]" 
       return 
      } 
      keys.put(key, val); 
      line = key.replaceAll(/([^\\]) /, "\$1\\\\ ") + "=" + val; 
      } 
      fixed += line+"\n"; 
     } 
     new File(path).text = fixed; 
    }