2011-12-10 66 views
3

我正在使用的一個應用程序是在美國,中南美洲和歐洲使用的大型ASP.NET 3.5 Web窗體應用程序。我們也開始對AJAX做更多的工作,因此我們需要在JavaScript控件中定位字符串本地化策略。本地化ASP.NET Web窗體應用程序中的JavaScript字符串

例如,我們有一個寫成jQuery插件的控件,它將數據格式化爲可排序的表格。按鈕和表格列需要可本地化。

我們目前使用兩種不同的方法來處理這種情況,但我並不完全滿意。

  1. 編寫大量的jQuery插件風格的代碼,然後將一個script.aspx頁面,我們將在值拉從.resx文件,並將它們送入插件代碼上。下面是僞代碼的例子:

    <script> 
        var view; 
        $(function() { 
         view = { 
          columnHeaders: { 
           productNumber = <%$ Resources:WidgetProductNumber_HeaderText %>, 
           productDescription = <%$ Resources:WidgetProductDescription_HeaderText %> 
          } 
         }; 
    
        }); 
    </script> 
    
  2. 將JavaScript的純.js文件與到位串的自定義標記。我們有一個手冊HttpModule,它將解析JavaScript文件,並用來自任何現有.resx文件的文件名與正在處理的JavaScript文件的名稱相匹配的值替換標記。

這兩種方法都有問題。我寧願將我們的JavaScript代碼與我們的.aspx頁面分開,以使其更加不顯眼且可重複使用。

HttpModule方法很聰明,但對開發者有點不透明。我還希望實現一個名爲Rejuicer的JavaScript打包程序,它也被寫爲HttpModule,並且讓它們一起工作似乎需要定製開源代碼。我更願意在編寫代碼時使用代碼,以便隨着項目的進展升級它。

是否有任何其他嘗試和真正的策略來解決ASP.NET中的這個問題?

回答

1

看來,這兩種方法都比必要的複雜/麻煩一點。把事情簡單化。

1)使用.ashx,自定義http處理程序或Web服務,創建一個匹配客戶端JSON對象的.net對象(匿名,自定義 - 無關緊要)。

2)與本地化的值

3)設置響應的內容類型爲文本/ JSON或文本/ JavaScript的填充服務器側對象的屬性。

4)使用JavaScriptSerializer類,將對象序列化到響應流中。

從客戶端,你有兩個選擇:

1)使用AJAX調用ashx的/處理/服務,您的客戶端「視圖」對象設置爲響應JSON。

2)使用src =「the/path/to/the/serviceOrHandler」創建腳本標記。在這種情況下,您需要在響應輸出中包含js變量聲明。

讓我知道你是否需要一個代碼示例。

+1

感謝您的答覆,但我不知道這真的解決了我的問題。我試圖簡化在JavaScript UI組件中使用字符串的過程,而不是將數據本身國際化。你是否建議我應該建立另一個Web服務來將UI配置對象作爲JSON提供?我想這是做到這一點的一種方式,但它似乎比上面概述的解決方案更復雜。你能澄清嗎? –

0

我只是偶然發現了這個問題,而且我還有另外一個答案可以投入到環中。這不是我的工作或任何事情,但它看起來像一個相當優雅的解決方案。它涉及編寫本地化處理程序以向ASP.NET提供ASP.NET資源。這裏有幾個環節:

http://weblog.west-wind.com/posts/2009/Apr/02/A-Localization-Handler-to-serve-ASPNET-Resources-to-JavaScript

http://www.tikalk.com/use-aspnet-resource-strings-within-javascript-files/

相關問題