2012-12-29 96 views
5

我想創建一個可以用兩種語言(一個LTR和一個RTL)查看的網站。這意味着所有內容應以兩種語言中的任何一種顯示。JSP國際化RTL/LTR

我的框架是Spring,我使用的是Tiles2,但我認爲這個問題不是特定於框架的。

支持兩種語言的顯而易見的解決方案是將所有的JSP都加倍(所有的JSP,片段等),並且獲得適合您所選語言的樹的一部分。但是這會導致更改網站時出現問題(您可能忘記更新其他JSP),並且不可擴展(嘗試對5或10種語言進行此操作)。

我知道我可以使用屬性文件來託管不同語言的字符串,但是那麼我的網站將會是一個龐大的spring:message標記集合,並且會更難維護(如果我有一段100行,這是否全部進入單一屬性行?)

是否有任何種類的框架,插件,其他,它解決了這個問題?有沒有人遇到過這個問題的巧妙解決方案?

+0

將Tiles/Spring/etc留在考慮之外,您可以在這裏找到一個基本的JSP/JSTL示例:http://stackoverflow.com/questions/4276061/how -to-internationalize-a-java-web-application/4278571#4278571 – BalusC

+0

我已經使用這些技術來創建一個國際化的網站,這就是爲什麼我正在尋找不同的東西ferent。我正在考慮創建一個Eclipse插件,它會奇蹟般地接受任何JSP片段並將國際化嵌入其中,只是想知道是否有人遇到過這種類型的東西。 – TheZuck

回答

2

通常情況下,Web框架用於構建Web應用程序而不是Web站點,並且很少有很長的靜態段落。大部分內容是動態的,來自數據庫。但是,是的,通常的做法是將所有內容都放到資源包中,通常是以屬性文件的形式。

把長款的屬性文件不會造成太大的問題,因爲你可以通過一個反斜槓結束每一行把長段成多行:

home.welcomeParagraph=This is a long \ 
    paragraph splitted into several lines \ 
    thanks to backslashes. 
1

RTL和LTR是的一個上限和更困難的國際問題。

基本上它是一個MVC模型的視圖範圍的問題。這也可能包括圖片和情緒差異,如人的皮膚顏色。在這種情況下,您最好遵循HTML + CSS爲您提供的解決方案。

在例如:

<style type="text/css"> 
    *:lang(ar) { direction:rtl } 
    *:lang(de) { direction:ltr } 
</style> 

最好的做法是要求觀衆羣的成員什麼效果的網頁有他們。

+0

感謝,但是我正在尋找的翻譯解決方案,LTR/RTL可以以多種方式來解決,也許並不完美,但至少它的工作原理。我無法弄清楚的問題是如何將幾十頁翻譯成許多不同的語言,而不會有大量的視圖代碼重複,並且不會通過將其中的所有文本變爲變量而使代碼絕對不可讀 – TheZuck

4

我從來沒有意識到一個完整的項目,只是一些測試。我認爲這個問題並不像看起來那麼大,如果你遵循一些簡單的規則。這是我想要做的:

  • <body dir='ltr/rtl'>指定方向。與CSS方向屬性相比,這是首選。

  • 避免在所有CSS中使用不同的左/右邊距或填充。如果你必須打破這個規則,你可能需要使用兩個不同的文件(ltr.css和rtl.css)來包含所有這些不同的元素。

  • 有時您需要將一些元素從左向右移動,反之亦然。例如,在LTR中,您需要左側的菜單,但在RTL中,您希望它位於右側。你可以使用CSS來實現,但如果你不是專家,那麼這有時會變得複雜,你必須在所有瀏覽器中測試它。另一種選擇是根據情況使用一些IF。如果您使用基於網格的CSS庫(如Bootstrap),則最後一個選項將非常適合。

  • 請仔細選擇使用哪個CSS和JS庫。顯然,選擇那些提供RTL/LTR支持的。

  • 不要太擔心圖像。如果您必須根據語言更改一張圖片,可能是因爲它裏面有一些文字。所以,你必須使用不同的圖像。這是一個與i18n相關的問題,而不是文本方向問題。

  • 不要讓你的顧客過分挑剔它。我認爲,通過這些規則(也許還有更多),你可以得到一個好的結果。但是如果你的客戶開始抱怨這裏有一個像素,那麼你需要把所有這些複雜化,可能沒有必要。

  • 關於您的語言屬性文件。是的,使用它們。總是。這是即使您只使用一種語言的好做法:HTML結構與內容分離,很容易糾正或翻譯,有的詞或句子都只有一個文件...

1

我同意到這裏提供的大多數解決方案。你的問題是更多的設計(架構)導向而不是技術。您需要選擇路徑,無論您需要在服務器(java)端還是靜態文件中保留這種國際化邏輯。

如果你想去java方面(最好的解決方案),你需要保留兩個屬性文件並使用jstl標籤。這樣可以最大限度地減少您的工作,以防將來再添加其他語言。這是可維護的解決方案。我看到應用程序支持超過15種語言和時區。事實上,發佈過程非常簡單。

如果你想保留多個CSS和其他靜態文件,你很快就會發現事情很快就會耗盡你的手。我不認爲這是一個可維護的解決方案。

說了這麼多,我會把這個選擇留給應用程序的架構師。他將能夠根據應用的性質和給予他的限制來判斷走哪條路。

0

你不想隨處使用。這太遺憾了,因爲它只是你應該這樣做的方式。如果您需要國際化,將硬編碼文本保存在jsp中是一種不好的做法。此外,大多數現代IDE允許您通過按Ctrl +左鍵(或懸停鍵)來進入變量聲明,以便代碼中有很多變量不應該成爲維護的問題。

0

首先,對於每個文本元素,您必須區分它是用戶界面元素(例如按鈕標籤)還是編輯內容。

用戶界面元素的標籤將被存儲在屬性文件中,將必須被翻譯爲每個支持的語言(並提供一個默認值作爲回退)

redactionnal內容將被存儲在內容管理系統,該系統您將組織起來,以便輕鬆找到您的內容的本地化版本