2013-06-20 63 views
1

試驗在Web API上構建SPA應用程序我遇到了一個問題。 在我的項目中,我使用Resource.resx文件來本地化顯示的信息。 當我使用.cshtml格式創建視圖時,這並不是問題,但是當我使用Knockout模板時,我遇到了一個問題,因爲它們是.html,我無法再直接訪問Resource.resx。Knockoutjs模板文件和本地化的resx文件

我考慮了幾個選項,包括從Web API發送本地化的字符串和模型,在.cshtml文件中創建javascript變量,並在.html中創建JavaScript本地化文件並創建JavaScript本地化文件包含常量,或從.resx獲取值)。

任何人都有如何解決這個問題的好主意?

編輯: 好,兩個最可行的,我能想到的解決方案是打印的本地化字符串在.cshtml文件,像這樣:

@functions{ 
    public string LocalizedString() 
    { 
     return Resource.MyLocalizedString; 
    } 
} 
<input id="LocalizedString" type="hidden" value="@LocalizedString()" /> 

,然後使用jquery獲得的價值和輸入ID

$("#LocalizedString").val() 

所以我可以填充一個localized.js文件,我可以引用整個應用程序。

另一種選擇是創建一個wep api服務,它服務於我在我的應用程序中需要的字符串json列表。

public HttpResponseMessage Get() 
    { 
     var localString = new Dictionary<string, string> { 
      {"FullName", Resource.ACC_FullName}, 
      {"LastName", Resource.ACC_LastName}, 
      {"FirstName", Resource.ACC_FirstName} 
     }; 
     return Request.CreateResponse(HttpStatusCode.OK, localString); 
    } 

女巫將返回該JSON

{ 
fullName: "Fullt navn", 
lastName: "Etternavn", 
firstName: "Fornavn" 
} 

這可能隨後被存儲在localStorage的(我知道inital問題是淘汰賽相關的,這個代碼是angularjs,但我知道你可以做到這一點在淘汰賽

gets(): void { 
      this.http({ method: 'GET', url: '/api/locals' }). 
       success(function (data, status, headers, config) { 
        angular.forEach(data, function (value, key) { 
         localStorage.setItem(key, value); 
        }); 
       }). 
       error(function (data, status, headers, config) { 
        this.$log.warn(data, status, headers, config); 
       }); 
     } 

巫婆就可以使用

在頁面中使用了類似的事情
localStorage.getItem('Key') 

編輯:在AngularJS的情況下,你可以利用$ http內置緩存,非常聰明。

第一種解決方案可能會使得DOM中的變量更快地在DOM中可用,至少它們會在執行腳本時存在,但我不喜歡這種混淆我的html的想法,那些不應該在那裏的東西。 另一個解決方案清理html,但我不得不做一個api調用來獲取值,並且值不會直到該調用被返回。女巫意味着我可能需要延遲執行腳本,這些腳本依賴於那裏的值直到完成。但是迴應不會很大,我們總共可能會說50-100個字符串(對於我的網站atleast)。

現在,我還沒有實現任何這些解決方案,我不知道他們是否有什麼好處。所以如果任何人有任何意見或想法,我想聽聽他們。

回答

0

我有類似的問題。由於我對Knockout.js沒有經驗,所以我不確定它是否對您有所幫助。我有一個在我的資源文件名爲Test字符串,我能夠在使用下面的代碼行中我CSHTML在前端顯示它:

@Html.Raw(WmsWebMvcProto.Properties.Resources.Test) 
+0

是的,這是非常相似的解決方案之一是我試過了,我試圖在.cshtml文件中創建javascript變量並在.html模板文件中訪問它們。不過,我不喜歡這個解決方案,因爲我已經把javascript放在了我的.cshtml文件中,而不是放在一個單獨的.js文件中。另外,我遇​​到了訪問我在.html模板的.cshtml文件中創建的變量的問題。 –