-
Notifications
You must be signed in to change notification settings - Fork 1
/
LocalizationScriptMiddleware.cs
51 lines (49 loc) · 1.72 KB
/
LocalizationScriptMiddleware.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNet.Http;
using Newtonsoft.Json;
using CodeComb.AspNet.Localization;
namespace Microsoft.AspNet.Builder
{
public static class LocalizationScriptMiddleware
{
public static IApplicationBuilder UseJavascriptLocalization(this IApplicationBuilder self, string scriptUrl = "/scripts/localization.js")
{
var SR = self.ApplicationServices.GetService<ILocalizationStringCollection>();
var CultureProvider = self.ApplicationServices.GetService<IRequestCultureProvider>();
var culture = SR.Collection.Where(x => x.Culture.Contains(SR.SingleCulture(CultureProvider.DetermineRequestCulture()))).First();
var json = JsonConvert.SerializeObject(culture.LocalizedStrings);
return self.Map(scriptUrl, config =>
{
var js = new StringBuilder("var __dictionary = {};");
config.Run(async context =>
{
js.AppendLine("__dictionary = " + json + ";");
js.AppendLine(@"
function __replaceAll(str0, str1, str2)
{
return str0.replace(new RegExp(str1, 'gm'), str2);
}
function SR(key, params)
{
if (!params)
return __dictionary[key] || key;
else
{
var ret = __dictionary[key] || key;
for (var i = 0; i < params.length; i++)
ret = __replaceAll(ret, '\\{' + i + '\\}', params[i]);
return ret;
}
}");
await context.Response.WriteAsync(js.ToString());
return;
});
});
}
}
}