2009-10-14 41 views
21

如何更改當前語言環境?Grails如何更改當前語言環境

  • 我試圖把controller/action?lang=de,但我的區域仍然是en_US
  • 我嘗試使用這段代碼重寫值:

    def key = "org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER" 
    def localeResolver = request.getAttribute(key) 
    localeResolver.setLocale(request, response, new Locale("de","DE")) 
    

沒有改變。

  • 我試圖覆蓋使用這段代碼的價值:

    import org.springframework.web.servlet.support.RequestContextUtils as RCU; 
    RCU.getLocaleResolver(request).setLocale(request, response, new Locale("de","DE")) 
    

而且......什麼都沒有發生。我仍然將我的語言環境設置爲en_US

任何想法改變語言環境?

回答

25

根據Grails文檔的章10. Internationalization,Grails支持i18n的開箱即用,你確實應該能夠使用lang參數更改地區:

默認情況下,當檢測 用戶區域來自Accept-Language 表頭。但是,可以爲用戶提供 通過 只是傳遞了一個名爲lang 中的Grails的請求參數參數切換語言環境的能力:

/book/list?lang=de 

Grails將自動切換 用戶區域,並將其存儲在cookie 所以後續請求將有 新標題。

但有時您可能想要預設默認語言,因爲不是所有的應用程序都是英文的。要做到這一點,所有你需要做的是設置localeResolverresources.groovy Spring配置文件如下圖所示:現在

beans = { 
    localeResolver(org.springframework.web.servlet.i18n.SessionLocaleResolver) { 
     defaultLocale = new Locale("de","DE") 
     java.util.Locale.setDefault(defaultLocale) 
    } 
} 

,沒有更多的細節,我不能說,爲什麼使用lang參數不在你的情況下工作。以防萬一,你怎麼知道語言環境仍然是en_US ?.

+0

感謝您的回覆。我試過你的解決方案來改變defaultLocale,但我仍然得到一個en_US語言環境。檢索我的當前語言環境的好問題我使用'request.locale'。我也可以看到,grails仍然在閱讀默認的捆綁消息,而不是'de'版本。感謝任何線索! – 2009-10-14 23:38:47

+0

只是想確保你的驗證過程是好的,它是:) 但我必須說這真的很奇怪。你可以說是否設置了「Accept-Language」標題?你使用的是什麼版本的grails? – 2009-10-14 23:42:50

+0

是的怪異無疑是這個詞...我使用的是Grails 1.1。我剛剛檢查了http請求的頭部,我可以看到:'Accept-Language:en-us,en; q = 0.5' – 2009-10-14 23:53:20

6

您是否嘗試更改應用程序根URL中的區域設置(例如,http://localhost:8080/myapp/?lang=de)?

在嘗試更改應用程序根URL中的區域設置的Grails基本設置不起作用。 Grails在localChangeInterceptor中更改語言環境,在調用所有控制器之前調用該語言環境。當你訪問應用程序根URL時,沒有控制器被調用,因爲可以在默認UrlMappings中看到。

這就是爲什麼更改應用程序根URL中的區域設置不起作用。如果您嘗試在某個控制器中更改網址,則該網址有效。

當前語言環境下存儲關鍵org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME HTTP會話中。你可以在那裏檢查它。

正確的解決方案是將根url映射到UrlMappings中的某個控制器。

+0

感謝您的回答。但是,是的,我試圖改變我的控制器上的區域設置,它不起作用。這真的很奇怪,因爲文檔描述的是與你講的相同的行爲,但我的語言環境沒有變化......所以我使用會話變量構建了自己的國際化功能來存儲當前的語言環境。 – 2009-12-11 14:04:27

5

這problably太晚,但參考,我做這在我的索引頁控制器:

session['org.springframework.web.servlet.i18n.SessionLocaleResolver.LOCALE'] = new Locale("es", "PR") 
5

據我瞭解你正在檢查的區域「request.locale」的方式是錯誤的,它給出了瀏覽器的語言環境,而不是Grails應用程序的語言環境。

您應該使用「LocaleContextHolder.locale」。

2.0.3它通過簡單地通過參數lang=someLocale來改變語言環境。

+1

感謝您的解釋,這是有道理的。 – 2012-11-23 17:55:18

1

我有一個類似的問題,這是因爲一個空間。我:

[space]messages_de.properties代替messages_de.properties

0

我有這個問題一段時間回來代理荷蘭國際集團通過舊版本APACHE2.2和使用Grails的(2.3.9)戰爭文件時。我使用mod_proxy_html(3.1)/ Apache 2.4獲得了更好的運氣。也許更高級的grails修復了這個問題。

相關問題