2010-09-13 75 views
1

我對JDBC的理解是,它會根據JVM的默認語言環境自動設置Oracle NLS_LANGUAGE/NLS_TERRITORY會話參數。這對於獨立的swing應用程序來說很方便,但對於java webapp似乎沒有用處。唯一的解決辦法我能想出是正確的前專門設置會話參數實際上做一個數據庫查詢,類似的東西:在Web應用程序中將Java NLS_LANGUAGE設置爲java

Connection c = // However you get it. 
Statement s = c.createStatement(); 
s.execute("alter session set NLS_LANGUAGE = 'SPANISH'"); 
// Do actual query here 

我的問題:

  1. 這是設置的最佳方式來自webapp的Oracle語言/國家參數?
  2. 由於Oracle參數採用語言名稱而不是代碼,是否存在從java/ISO語言代碼到Oracle語言名稱的映射?例如,我可以使用Locale.getDisplayLanguage()並且安全嗎?

回答

1

可以取決於你的架構。

一些地方選擇針對單個數據庫(即法國,英國,西班牙一個地區)使用多個地理位置本地網絡應用程序。

或者您從數據庫中以'計算機'格式提取數據(例如日期,數字)並讓網絡應用程序將其轉換爲最終用戶的偏好設置(或者如果您沒有用戶,則可能基於瀏覽器信息登錄)。

或者你有不同的'領土'單獨的連接池。

請記住,更改地區的查詢可能會影響index usage and sorting

1

如果您使用連接池,這是確保約翰尼的結果是美國和約翰的結果是德國最好的方式。

假設您存儲登錄名/用戶信息,則可以使用V $ NLS_VALID_VALUES作爲數據源,爲LANGUAGE,TERRITORY,CHARACTERSET和SORT存儲用戶的首選NLS值。

+0

感謝您的評論,我對這裏的「用戶」有點困惑 - 我曾參與過的每個Web應用程序(跨四家公司)只有一個用戶,這是應用程序本身:個人用戶沒有登錄到數據庫。你的web應用使用不同的設置?但是,真正讓我困惑的是,我無法在互聯網上找到解決這個問題的任何東西。每個國際化的webapp都不會遇到同樣的問題嗎?我錯過了什麼嗎? – fool4jesus 2010-09-13 19:42:25

+0

許多應用程序都有一個連接到後端的「數據庫」用戶,但有一個不同的「上下文」用戶,以確保Alice不會更改Bob的帳戶餘額。是的,i18n/l10n(國際化/本地化)是一個巨大的問題,即使是跨國企業級企業級軟件也無法處理好。 – 2010-09-13 19:56:50

相關問題