2016-07-28 209 views
1

我加入一個資源包模型是這樣的:的Freemarker與資源包 - 如何避免轉義單引號

 Map<String, Object> root = new HashMap<String, Object>(); 

     Locale locale = org.apache.commons.lang3.LocaleUtils.toLocale(request.getLanguage()); 

     BeansWrapper beansWrapper = new BeansWrapperBuilder(Configuration.VERSION_2_3_21).build(); 

     ResourceBundle bundle = ResourceBundle.getBundle("templates/bundles/messages", locale); 

     root.put("bundle", new ResourceBundleModel(bundle, beansWrapper)); 

然而,我的本地化團隊不希望撇號(單引號字符)逃過我的模板如:

bundle.value = You''re account is ready! 

有沒有什麼我可以在我的配置中設置,將輸出文本原樣,避免需要轉義單引號?

+0

什麼逃脫了他們?這與FreeMarker有什麼關係? – ddekany

+0

這是將資源包放入freemarker上下文中。單引號需要通過額外的單引號進行轉義。翻譯人員不喜歡它,並希望它是一個單引號 – fansonly

回答

1

如果您沒有MessageFormat參數,則您不必(實際上不得)跳過撇號。例如,如果這是你的.properties文件:

m1={0}''s house 
m2=Foo''s house 
m3=Foo's house 

,這是你的模板:

${bundle.m1} 
${bundle.m2} 
${bundle.m3} 

${bundle('m1', 'Bar')} 

那麼這將是輸出:

{0}''s house 
Foo''s house 
Foo's house 

Bar's house 

正如你所看到的, ''僅在最新版本中是必需的。

+0

我怎樣才能完全消除它的需要? – fansonly

+0

這就是'java.text.MessageFormat'的語法,它是'ResourceBundle'-s的標準格式。如果你需要一個不同的語法,你可以在'freemarker.ext.beans.ResourceBundleModel'中調用'MessageFormat'構造函數之前對'String'進行預處理(或者使用別的東西來代替'MessageFormat')。爲此,您可以將'ResourceBundleModel'複製粘貼到您自己的包中並對其進行修改,然後擴展您正在使用的'ObjectWrapper',以便將模型用於包裝'ResourceBundle'-s。 – ddekany