在我的应用程序中,我在此文档之后添加了多语言支持。
现在我面临一个问题:我还需要翻译一些javascript插件,所以我需要在js逻辑中使用.resx字符串。
带有我的字符串的代码段:
要访问这些字符串,我可以在特定控制器中使用IStringLocalizer,让我们假设上面的字符串是UserController的一部分,我可以在View this中访问声明:
@inject IStringLocalizer<UserController> Localizer
然后:
<h2>@Localizer["LastName"]</h2>
现在假设我需要以类似JQuery插件本地化的方式传递LastName字符串。为此,我实际上找到了一种解决方法,该方法包括在所需的View中声明一个javascript变量:
@inject IStringLocalizer<UserController> Localizer
@section UserScript{
<script>
var Lang = {
PasswordEqual: '@Localizer["PasswordEqual"]',
PasswordMismatch: '@Localizer["PasswordMismatch"]',
}
</script>
}
所以我可以在javascript代码内部访问Lang对象并本地化插件,例如:
$('#birthDate').daterangepicker({
singleDatePicker: true,
locale: {
format: 'DD/MM/YYYY',
daysOfWeek: [
Lang.Sunday,
Lang.Monday,
这行得通,但由于以下原因,维护起来确实是巨大的:
我需要在每个需要脚本本地化的.cshtml文件中声明Lang对象 我每次需要为IStringLocalizer中可用的特定字符串设置对象键 如果更改字符串键,则还需要手动更新所有文件。 我在寻找什么:
我正在寻找一种解决方案,该解决方案将使用当前视图中加载的.resx文件中的所有可用属性自动填充Lang对象。我想最好的处理方法是_Layout。
有人可以帮助我吗?
答案 0 :(得分:0)
我将创建一个包含所有Localized项目的Class,对其进行序列化并将其发送到前端。
public class LocalizedItems
{
public string value1 { get; set; }
public string value2 { get; set; }
}
var localizedItems = new LocalizedItems();
localizedItems.value1 = "My Value 1";
localizedItems.value2 = "My Value 2";
string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(localizedItems);
然后在javascript中创建一个变量来保存这些值。然后,在加载页面时,要么从隐藏的输入中读取json字符串
<script type="text/javascript">
var localizedItems;
$(document).ready(function () {
localizedItems = $.parseJSON($('#HiddenLocalizedItems').val());
alert(localizedItems.value1);
});
</script>
或直接将它们写到页面上。
<script type="text/javascript">
var localizedItems = <%= json %>;
$(document).ready(function () {
alert(localizedItems.value1);
});
</script>