試驗在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)。
現在,我還沒有實現任何這些解決方案,我不知道他們是否有什麼好處。所以如果任何人有任何意見或想法,我想聽聽他們。
是的,這是非常相似的解決方案之一是我試過了,我試圖在.cshtml文件中創建javascript變量並在.html模板文件中訪問它們。不過,我不喜歡這個解決方案,因爲我已經把javascript放在了我的.cshtml文件中,而不是放在一個單獨的.js文件中。另外,我遇到了訪問我在.html模板的.cshtml文件中創建的變量的問題。 –