2012-07-09 26 views
0

像問題的提問者在這裏重寫JSF的默認國際化處理

Variable substitution JSF Resource Bundle property file

我在無法引用消息包的其他屬性鍵的值略有嚇呆了。

雖然我看到編寫我自己的垃圾處理程序[0]是多麼容易,它可以在自定義組件中做我想要的東西,這將使仍在使用默認JSF實現的調用消息包的模板中留下表達式。

是否可以重寫消息包的默認JSF處理?

[0]或更好,使用在答案中引用的代碼對上述問題 https://code.google.com/p/reflectiveresourcebundle/

回答

1

你可以提供一個具體的ResourceBundle實現「基本名」的全名,而不是單獨的屬性文件的路徑和文件名。

E.g.

public class YourCustomResourceBundle extends ResourceBundle { 
    // ... 
} 

可以如下

<application> 
    <resource-bundle> 
     <base-name>com.example.YourCustomResourceBundle</base-name> 
     <var>text</var> 
    </resource-bundle> 
</application> 

如下

<f:loadBundle baseName="com.example.YourCustomResourceBundle" var="text" /> 

以下是其中包含一些具體的幾個相關問題/答案被註冊或宣佈爲每個視圖/模板的基礎上您可以用作開球示例的代碼:

+0

感謝您的回答Balus和有用的後續鏈接 – solidgoldpig 2012-07-16 10:19:40

0

一切皆有可能對於那些誰嘗試。問題不在於是否可行,而在於是否應該這樣做。這個問題的答案是:可能不是。

引用消息包中的其他消息意味着您要構建複合消息。因此,您可以多次重複使用部分消息,只是爲了節省一小部分磁盤空間或一小部分開發時間。
如果是這樣,我有一個消息給你。你打算做的事情叫做串聯,它是第二個最常見的I18n缺陷。它的含義和硬編碼字符串一樣糟糕。

爲什麼?因爲目標語言不遵循英語語法規則。首先,翻譯時常常需要重新排列句子。這可能很容易通過使用(編號或命名)佔位符來解決。但另一方面,根據上下文,翻譯可能會有所不同。也就是說,它可能需要完全以其他方式翻譯,或者根據語法情況,情緒或性別,單詞結尾可能需要不同。

我的建議是,不要使用這種快捷方式,它會產生比修復更多的問題。
現在你應該知道爲什麼「那些愚蠢的羅馬人」沒有像這樣實施它:它違背了國際最佳實踐。

+0

感謝您的回答 - 我瞭解別名的缺點,但我從來沒有發現它是現實世界中的問題,無論是使用gettext還是更多家庭釀造解決方案。 – solidgoldpig 2012-07-16 10:21:48