2012-02-25 65 views
4

我想根據當前的瀏覽器區域設置顯示貨幣符號($,€)。 這樣做的最佳方法是什麼?什麼是顯示貨幣符號區域設置相關的最佳方式?

我想:

locale = FacesContext.getCurrentInstance().getViewRoot().getLocale(); 
System.out.println(locale); //gives: "en" 
Currency.getInstance(locale).getSymbol(); //java.lang.IllegalArgumentException 
Currency.getInstance(locale.GERMANY).getSymbol(); //gives € 

我怎樣才能獲得基於語言環境相關的瀏覽器設置(這是「恩」在這裏)的符號?

更新

locale.getLanguage() > "de" 
locale.getDefault() > "de_DE" 

儘管如此,Currency.getInstance(locale).getSymbol();失敗。

+0

當您使用JSF時,爲什麼不使用''? – BalusC 2012-02-25 22:22:53

+0

@BalusC我只想顯示基於區域的符號,沒有任何數字(至少在這個輸出標籤中)!或者也可以使用convertNumber? – membersound 2012-02-26 11:23:36

+0

@membersound getLanguage()'不是很有趣,因爲你不能從語言映射到貨幣,就像我昨天在回答中告訴你的那樣。 'getDefault()'不是很有趣,因爲這是一個靜態方法並返回虛擬機的默認語言環境。這與您當前的語言環境實例無關。唯一有趣的是你的語言環境的國家一部分。你可以通過調用locale.getCountry()來實現。 – 2012-02-26 18:11:25

回答

2

貨幣取決於國家 - 地區的一部分。由於en不包含國家/地區部分,因此這是創建貨幣實例的非法參數。

換言之:對於語言環境「en」,您希望$,US$,AU$£?或者是其他東西? 「英語」沒有貨幣。有美國,英國,澳大利亞等貨幣,但不是英語。

編輯
如果用戶配置他的瀏覽器中正確,那麼你會得到確實既具有區域設置:國家和語言的部分(例如,en-US)。這些語言環境可以按照您在問題中所做的方式使用。

但是你應該考慮使用基於IP地址的地理定位。有像GEO-IPMaxMind這樣的數據庫。請注意,有不同之處 - 美國在德國的海外學生在他的筆記本電腦上衝浪。他的瀏覽器可能會返回en-US,但GEO-IP數據庫的最可能目標是Germany。但也許這正是你想要的?!

最後,您可以使用這些方法之一作爲主要目標因子,第二個作爲備份。如果兩者均失敗,則切換爲默認值(例如US $)

+0

好的,我怎樣才能顯示一個區域依賴的貨幣符號?我的意思是,到目前爲止我沒有找到任何東西,但肯定會有這樣做的可能性?例如來自歐洲的人前往網站:顯示€,來自US> $的人? – membersound 2012-02-25 18:51:29

+0

我在答案中添加了更多信息。讓我知道我是否可以幫助你。 – 2012-02-25 22:05:21

+0

這很有趣,但只要按照默認瀏覽器語言顯示符號就足夠了。稍後我會提供一個菜單,讓用戶如果想要更改語言。目前即使是本地化工作。無論我將瀏覽器設置爲de-de還是en-us,en-uk,我都無法檢索貨幣符號。查看我更新的代碼。 – membersound 2012-02-26 15:07:44

相關問題