2011-10-16 80 views
3

到目前爲止,我爲我的JavaScript應用程序(使用jQuery UI構建)的i18n和l10n使用Globalize。這有效,但它將我的代碼綁定到另一個特定的庫。現在我正在尋找一種方法來解決這個問題,因爲我重新使用了一些不支持i18n的源,我寧願不改變它。我不是在爲可以插入任何實現的i18n使用全局接口。總結:如何在不改變源代碼的情況下將i18n和l10n支持添加到現有應用程序中?我不是在問這是否是一個好主意,我問是否可行以及如何。現有JavaScript應用程序的國際化和本地化

到目前爲止,我想出了這些方法,但兩者各有缺點:

  1. 如果我依靠的是使用jQuery的(我能在我的情況),我可以取代text/val/append等方法,即所有操作DOM的方法。但其中有相當多的,其中每個人都有一些不同。我還可以更進一步並取代DOM方法。

  2. 步行DOM並替換文本節點和表單值。這可行,但價格昂貴,動態變化難以檢測,因爲沒有標準化的方法來做到這一點。

那些提供了國際化問題的部分解決方案,但對於l10n而言,這兩者都不起作用。

您將如何解決向現有應用程序添加i18n和l10n支持的問題?

回答

2

簡短的回答:
有沒有辦法來支持i18n添加到應用程序沒有改變其來源。

讓我詳細說明一下。你需要用i18n做什麼:

  1. 外部化字符串。
  2. 根據有效區域設置格式化日期,時間,數字等。
  3. 接受根據特定地區的用戶輸入(即日期,時間,號碼)。
  4. 正確處理文化偏見(即修改顏色,圖像,聲音...)。

這些東西可以做沒有修改源代碼。抱歉。

Ad1。外部化字符串看起來很簡單,對吧?只需瀏覽DOM並用翻譯文本替換任何實例即可。
不,不是這樣的。首先,您可能還擁有不可訪問的文本,如JavaScript驅動的錯誤或信息消息(即通過alert()函數)。這不是DOM可訪問的。其次,總是存在複合消息,即你輸入一些數字(「12條記錄與你的查詢匹配」)。翻譯時,通常需要重新排列句子(即數字最後)。你需要分析每個句子的數字或日期,並專門對待它。而如果你把一個可變的字符串?你將如何克服這種情況(特別是如果這個字符串可能隨時間而改變)?

Ad2。& Ad3。格式化和解析很簡單,對吧?那麼,是的如果你知道區域。不幸的是,檢測語言環境的唯一明智的方法是在服務器端(從Accept-Language頭文件)執行此操作。客戶端對它的支持幾乎不存在(在許多瀏覽器的情況下)或嚴重損壞(在其他情況下)。所以你甚至不知道使用哪個區域。而當你無法修改底層JavaScript時,你將如何接受本地日期?

Ad4。支持不同的顏色是可以實現的,但唯一的方法是爲每個DOM元素手動設置。祝你好運。 理論上添加額外的圖像或聲音需要將它們放在正確的目錄中並修改DOM,以便使用適當的。再次祝你好運。

基本上,你想減少工作量,對不對?原來,通過實施非標準解決方案(這實際上不是什麼行業標準建議),你最終會做更多工作,或者你的i18n支持會(讓我用這個委婉說法)窮人。

+0

很好的例子。感謝您整理我的思想。 –