翻訳された文字列を含む JavaScript ファイルをサーバー上に動的に作成します。 Chrome インスペクターを見ると、このファイルはキャッシュされません (Scripts フォルダーにある他の実際の JS ファイルはキャッシュされます) *なぜそうではないのですか? *
<script src="somepath/Scripts/translate-nl-BE.js"></script>
or
<script src="somepath/Scripts/translate-en-GB.js"></script>
これは、次の MVC アクションにマップされます。
[HttpGet]
public ActionResult TranslateJS(string culturecode) {
ViewBag.JSCulture = culturecode;
Response.ContentType = "text/javascript";
return PartialView("TranslateJS");
}
ビューは次のとおりです。
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<%
string culturecode = ViewBag.JSCulture;
%>
var translations = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize((ViewBag.Translate as List<ERPManager.TranslationService.FlatTranslation>).Where(x=>x.CultureCode==culturecode).ToDictionary(t=>t.Key,f=>f.Value)) %>;
これは基本的にjson配列をシリアル化するだけです(これは単にjsonresultを返すよりも汚いように見えますが、このファイルをajaxで呼び出すことはできません。スクリプトタグにリンクする必要があります
これは、サーバーから取得した応答です。
Cache-Control:private
Content-Length:10987
Content-Type:text/javascript; charset=utf-8
Date:Thu, 04 Apr 2013 10:15:11 GMT
Server:Microsoft-IIS/7.5
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:3.0
X-Powered-By:ASP.NET
get が返すファイルのプレビューを次に示します。これは基本的に、翻訳の単なるキー値ディクショナリです。
var translations = {"vertaald":"Vertaald","gerelateerd":"Gerelateerd","details":"Details"};