2012-01-30 9 views
4

リソースバンドルからのメッセージ/変換のリストを取得しようとしましたが、失敗しました(例外がスローされます)。このアプリはIDEAのTomcatで動作しています。Grails:リソースバンドルを読む

Locale locale = new Locale("en"); 
ResourceBundle bundle = ResourceBundle.getBundle('i18n/dictionary', locale); 

ここで何が間違っていますか? i18n/dictionaryはクラスパス上にあります。 'i18n/dictionary'が間違っている可能性があります。

は、私がメッセージソースを取得することができるんだけど、私はこの(SPRING)オブジェクトからキーを入手することはできません。

def messageSource = grailsAttributes.getApplicationContext().getBean("messageSource"); 

答えて

1

リソースパスが不完全でした。あなたはフロントエンドに変換テーブルが必要な場合は、多分、次のコントローラが役に立つかもしれません:

class ClientMessagesController { 

def index = { 
    Locale locale = session.getAttribute('locale') ?: new Locale("en"); 
    ResourceBundle bundle = ResourceBundle.getBundle('\\grails-app\\i18n\\clientMessages', locale); 

    def sep = ''; 
    def sb = new StringBuilder(); 
    sb.append('<script type="text/javascript">\n'); 
    sb.append('_i18n = {\n'); 
    bundle.getKeys().each {key -> 
     sb.append(sep); 
     sb.append(key.replace('.', '_')); 
     sb.append(': "'); 
     sb.append(bundle.getString(key).replace('"', '&quot;')); 
     sb.append('"\n'); 
     sep = ','; 
    } 
    sb.append('};\n</script>\n') 
    render(text: sb.toString()); 
} 

}

+4

'JsonBuilder'を使用し、JSONを自分でビルドしないでください。 –