Spring3國際化和本地化

我最近想將Spring 3提供的國際化和本地化功能添加到我當前的項目之一中。 我瀏覽了Spring文檔,然后在Internet上搜索以找到一些資源。
但是我找不到能夠滿足客戶要求的資源。 大多數教程都像hello world應用程序,它提供了基本的理解。 即使是spring文檔,也沒有提供有關將此功能集成到我們自己的項目中的詳細說明。 專業的開發人員可以從spring文檔中挑選東西。 但是對于其他人,則必須付出額外的努力來使事情正常運行。 通過本教程,我將解釋大多數客戶期望的非常實際的情況。
要求
我在我的應用程序中使用Spring Security。 用戶應該能夠從登錄頁面中選擇語言,該頁面被指定為spring security XML文件的“登錄頁面”。 我在登錄頁面的右上角提供了“英語”,“中文”,“德語”和“西班牙語”鏈接,以選擇語言。 用戶可以選擇語言并通過提供用戶名和密碼來登錄系統。 然后,整個應用程序應來自所選語言。 同樣,從登錄頁面選擇語言時,登錄頁面的內容也應更改。
彈簧配置
第一步,我必須在dispatcher-servlet.xml中配置LocaleChangeInterceptor攔截器 文件。 此XML文件名將根據web.xml文件中分配給DispatcherServlet的名稱進行更改。 我已將“ dispatcher”作為DispatcherServlet的名稱。 所以我應該在/ WEB-INF文件夾下創建' dispatcher-servlet.xml '文件。 我的應用程序正在Tomcat 7上運行。
我不能像在Spring文檔中那樣通過聲明此攔截器的方法來使其工作。 登錄之前更改語言環境的請求(即,從登錄頁面開始)未被語言環境更改攔截器攔截。 因此,我不得不宣布它為休假。
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/doChangeLocale*"/><bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" ><property name="paramName" value="locale" /></bean></mvc:interceptor>
</mvc:interceptors>
LocaleChangeInterceptor ”將攔截請求更改語言環境的請求,并借助“ SessionLocaleResolver ”將相應的語言環境代碼存儲在會話中。
接下來,我們將研究如何在“ dispatcher-servlet.xml”文件中聲明“ SessionLocaleResolver”。
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"><property name="defaultLocale" value="en" />
</bean>
SessionLocaleResolver將在當前會話中存儲區域設置,并針對當前會話的每個后續用戶請求解析該區域設置。
接下來,我們必須聲明消息資源bean。
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"><property name="useCodeAsDefaultMessage" value="true" /><property name="basenames"><list><value>classpath:messages</value></list></property><property name="cacheSeconds" value="0" /><property name="defaultEncoding" value="UTF-8"></property>
</bean>
我的應用程序應支持4種語言。 因此,我將4個屬性文件添加到“ resources”文件夾中(最終,所有這些屬性文件應位于“ classs”文件夾中),如下所示。
messages_de.properties –德語
messages_en.properties –英文
messages_zh.properties –中文
messages_es.properties –西班牙語
注意,所有文件名都應以您指定為消息資源bean的'basenames'屬性的文本開頭。
Spring 3安全配置在此實現中非常重要。 請記住,當您單擊登錄頁面上的任何區域更改鏈接時,您尚未通過身份驗證。 但是,該請求仍應由“ LocaleChangeInterceptor”攔截。 否則,語言將不會按預期更改。 因此,應該允許任何匿名用戶發出區域更改請求,并且該請求應通過“ LocaleChangeInterceptor”。
仔細研究我的spring安全配置。
<http auto-config="false"><form-login login-page="/login.jsp"  authentication-failure-url="/login.jsp?login_error=true" default-target-url="/mainMenu.htm"/><logout logout-success-url="/login.jsp"/><intercept-url pattern="/doChangeLocale**" access="ROLE_ANONYMOUS,ROLE_ADMIN,ROLE_USER"/><intercept-url pattern="/**" access="ROLE_ADMIN,ROLE_USER"  />
</http>
用戶可以通過login.jsp文件提供用戶名和密碼來登錄系統,并且該頁面具有用于更改語言環境的相應鏈接。 當用戶未經身份驗證而對受保護資源提出任何請求時,該用戶將被重定向到login.jsp頁面。 上面的配置說,所有傳入應用程序的請求都應來自經過身份驗證的用戶,并且除了“ / doChangeLocale **”請求外,還應授權該用戶。
攔截URL'/ doChangeLocale **'非常重要。 否則,語言環境更改攔截器將不會攔截更改語言環境的請求,并且最終語言環境也將不會更改。
以下是放置在login.jsp文件中的語言環境更改鏈接。
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=en">English</a>
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=de">German</a>
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=es">Spanish</a>
<a href="<%=request.getContextPath()%>/doChangeLocale?locale=zh">Chinese</a>

希望這對您有幫助。

參考: Spring3國際化和本地化–并非來自“ Hello World”,而是來自JCG合作伙伴 Semika loku kaluge(來自Code Box博客)的“實用” 。


翻譯自: https://www.javacodegeeks.com/2012/07/spring-3-internationalization-and.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371905.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371905.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371905.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

h3c交換機 查看二層交換機端口ip_【分享】項目中如何選到稱心如意的交換機?...

項目中如何選擇交換機&#xff1f;這七個步驟不能少如何選擇交換機&#xff1f;如何根據項目確定網絡結構&#xff1f;我們在做大部分項目都有這樣的疑問&#xff0c;交換機做為弱電中最常用的設備之一&#xff0c;關于他的使用與選擇&#xff0c;不得不知&#xff0c;本期我們…

SSH中一些典型的問題

struts2 1-1&#xff1a;為什么每次請求都要創建一個Action對象&#xff1f; 是出于對線程安全的考慮&#xff0c;每個request都不會相互影響 1-2&#xff1a;ModelDriven攔截器的配置中refreshModelBeforeResult解決了什么問題&#xff1f; 先把舊的model對象從ValueStack…

為什么計算機連接不上打印機,為什么電腦連接打印機后卻沒反應

2013-12-12我的筆記本怎么連接不了打印機 顯示是這樣的好&#xff1a;以下方法供您參考&#xff1a;看一下您的系統服務中這兩個(最上面 和最下面的是不是沒啟用)總之是您的局域網連接沒有連接上&#xff0c;要不在網上鄰居里您會看到其他的機器的&#xff0c;這是搜到的解決的…

JavaFX 2.0布局窗格– BorderPane

BorderPane非常適合開發更復雜的布局。 通常&#xff0c; BorderPane提供五個不同的區域&#xff1a;頂部&#xff0c;右側&#xff0c;底部&#xff0c;左側和中央。 您可以通過調用setTop/setBottom/set…方法將Node設置到每個區域。 這種方法使開發“類似于網站”的應用程序…

頁面排版簡單樣式

頁面排版簡單樣式demo <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh-cn"> &l…

JavaWeb基礎(jsp初識)

jsp, java server page jsp頁面是在服務器上運行的一個頁面 動態網頁 與后臺有數據交互的頁面 與其他語言的區別: jsp 使用java語言進行開發, 安全性高, 適合大型項目, 企業級的文本應用分布式項目, 服務器集群, hadoop asp.net 使用c#, .Net平臺, 簡單易用, 因為不開源, 所以安…

nao機器人拆解_一些機器人硬件網站

以前收集過一些網站&#xff0c;偏機器人機械結構、硬件、參數(也有模擬或算法)。在 https://www.zhihu.com/question/19826366 也夾雜著一些網址&#xff0c;但是有些網址沒有深入的內容&#xff0c;排版也不好&#xff0c;所以 在這里編輯成一個列表&#xff0c;方便歸檔。歡…

心電圖是模擬計算機嗎,心電圖儀

心電圖儀是由威廉愛因托芬(W. Einthoven,1860-1927)發明的。 什么是心電圖儀(機)M311986 心電圖儀能將心臟活動時心肌激動產生的生物電信號(心電信號)自動記錄下來&#xff0c;為臨床診斷和科研常用的醫療電子儀器。國內一般按照記錄器輸出道數劃分為&#xff1a;單道、三道、六…

從Java 8啟動項目拼圖?

在馬克雷因霍爾德 &#xff08; Mark Reinhold &#xff09;在他的《 項目拼圖&#xff1a;火車晚點 》一文中提出“將項目拼圖推遲到Java 9的下一個發行版中”。 他解釋了這樣做的原因&#xff1a;“仍然存在一些重大的技術挑戰”&#xff0c;并且“沒有足夠的時間來進行廣泛的…

ChannelOption用到的socket的標準參數

ChannelOption.SO_BACKLOG, 1024 BACKLOG用于構造服務端套接字ServerSocket對象&#xff0c;標識當服務器請求處理線程全滿時&#xff0c;用于臨時存放已完成三次握手的請求的隊列的最大長度。如果未設置或所設置的值小于1&#xff0c;Java將使用默認值50。 ChannelOption.SO_K…

cbrt c語音_isgraph - [ C語言中文開發手冊 ] - 在線原生手冊 - php中文網

在頭文件中定義int isgraph(int ch);檢查給定字符是否具有圖形表示形式&#xff0c;即它是數字(0123456789)&#xff0c;大寫字母(ABCDEFGHIJKLMNOPQRSTUVWXYZ)&#xff0c;小寫字母(abcdefghijklmnopqrstuvwxyz)或標點符號(!"#$%&()*,-./:;<>?[\]^_{|}~)或特定…

計算機的內存和cpu,內存與CPU二者之間的關系_Intel服務器CPU_服務器產業-中關村在線...

“在一起&#xff0c;在一起”&#xff0c;相信這也是很多人希望的結果&#xff0c;無論是從技術角度&#xff0c;還是從空間角度&#xff0c;似乎二者都有著很多理由被放在一起完成任務。但是&#xff0c;二者為何一直沒有“在一起”呢&#xff1f;也許這句歌詞可以回答原因&a…

JUnit,Logback,帶有Maven 3的Maven

在本系列中&#xff0c;我們已經學習了建立基本的Spring MVC應用程序并學習了如何在Spring MVC中處理表單 。 現在該討論更多涉及的主題了。 但是&#xff0c;在我們涉足更深的領域之前&#xff0c;讓我們先進行一些基礎設置。 單元測試 我不是TDD傳播者。 我在那里說了。 我從…

Gradle中的buildScript,gradle wrapper,dependencies等一些基礎知識

就想收藏一篇好文&#xff0c;哈哈&#xff0c;無他 Gradle中的buildScript代碼塊 - 黃博文 然后記錄一些gradle的基礎知識&#xff1a; 1.gradle wrapper就是對gradle的封裝&#xff0c;可以理解為項目內部內置了gradle 2.dependencies的參數 上官方參數表https://docs.gradle…

phonegap工程中修改app的名字

針對phonegap比較高的版本&#xff0c;我的是6.4.0。 在phonegap工程中&#xff0c;當添加了iOS和android平臺或多個平臺后&#xff0c;工程進行了開發&#xff0c;然后覺得app的名字想修改一下&#xff08;比如在手機上顯示的app名字&#xff0c;或者通過ipa導入安裝或者apk包…

ac ap方案 華為_華為無線_AC+AP小型無線網絡配置實驗_v1

【如果在實驗中有什么疑問&#xff0c;歡迎關注微信公眾號“IT后院”給我留言&#xff0c;我會抽空回答你的問題】華為無線-ACAP小型無線網絡配置實驗_v1網絡結構圖&#xff1a;步驟一&#xff1a;配置網絡連通性SW:interface Vlanif100ip address 192.168.0.1 255.255.255.0in…

css類選擇器或邏輯,深入理解CSS中選擇器的邏輯處理

在過去的很長一段時間中&#xff0c;我們都說 CSS 是不帶有任何邏輯的&#xff0c;意思是在 CSS 中沒有控制流&#xff0c;也沒有某種類似于其他編程語言的方式來組織 CSS。CSS 天生缺乏邏輯性的問題導致了預處理器的出現。然而業界卻對 CSS 預處理器褒貶不一&#xff0c;支持預…

JSF基于事件的交流:新派方法

在上一篇文章中 &#xff0c;我們學習了基于Observer / Event Listener和Mediator模式的基于事件的通信。 由于它們的缺點&#xff0c;我想展示基于事件的通信的更有效方法。 我們將從Google Guava EventBus開始&#xff0c;以CDI &#xff08;Java EE平臺的上下文和依賴注入&a…

菜鳥之路-淺談設計模式之單例設計模式

單例設計模式 定義&#xff1a;確保一個類僅僅有一個實例&#xff0c;并且自行實例化并向整個系統提供這個實例。單例模式是一種經常使用的軟件設計模式。在它的核心結構中僅僅包括一個被稱為單例的特殊類。通過單例模式能夠保證系統中一個類僅僅有一個實例并且該實例易于外界訪…

python 32bit數據結構_python實現bitmap數據結構詳解

bitmap是很常見的算法設計&#xff0c;例如用以Bloom Filter中&#xff1b;用以無反復整數金額的排列這些。bitmap一般根據數組來完成&#xff0c;數組中每一個原素能夠當做是一系列二進制數&#xff0c;全部元素組成更高的二進制結合。針對Python而言&#xff0c;整數金額種類…