我對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
我的問題:
- 這是設置的最佳方式來自webapp的Oracle語言/國家參數?
- 由於Oracle參數採用語言名稱而不是代碼,是否存在從java/ISO語言代碼到Oracle語言名稱的映射?例如,我可以使用Locale.getDisplayLanguage()並且安全嗎?
感謝您的評論,我對這裏的「用戶」有點困惑 - 我曾參與過的每個Web應用程序(跨四家公司)只有一個用戶,這是應用程序本身:個人用戶沒有登錄到數據庫。你的web應用使用不同的設置?但是,真正讓我困惑的是,我無法在互聯網上找到解決這個問題的任何東西。每個國際化的webapp都不會遇到同樣的問題嗎?我錯過了什麼嗎? – fool4jesus 2010-09-13 19:42:25
許多應用程序都有一個連接到後端的「數據庫」用戶,但有一個不同的「上下文」用戶,以確保Alice不會更改Bob的帳戶餘額。是的,i18n/l10n(國際化/本地化)是一個巨大的問題,即使是跨國企業級企業級軟件也無法處理好。 – 2010-09-13 19:56:50