Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net核心剃须刀具有错误的文化_C#_.net_Razor_.net Core_Asp.net Core Localization - Fatal编程技术网

C# .Net核心剃须刀具有错误的文化

C# .Net核心剃须刀具有错误的文化,c#,.net,razor,.net-core,asp.net-core-localization,C#,.net,Razor,.net Core,Asp.net Core Localization,我有一个本地化的.Net Core 3应用程序。我的资源位于.resx文件中的单独程序集中。本地化设置为使用以下cookie: var cultureProvider = new CookieRequestCultureProvider(); cultureProvider.CookieName = "MyCultureCookie"; var localizationOptions = new RequestLocalizationOptions { Defaul

我有一个本地化的.Net Core 3应用程序。我的资源位于.resx文件中的单独程序集中。本地化设置为使用以下cookie:

var cultureProvider = new CookieRequestCultureProvider();
cultureProvider.CookieName = "MyCultureCookie";

var localizationOptions = new RequestLocalizationOptions
{
    DefaultRequestCulture = new RequestCulture("de"),
    SupportedCultures = StaticData.SupportedCultures,
    SupportedUICultures = StaticData.SupportedCultures,
    RequestCultureProviders = new List<IRequestCultureProvider> 
    { 
        cultureProvider,
        new AcceptLanguageHeaderRequestCultureProvider()
    }
};

app.UseRequestLocalization(localizationOptions);
我的观点是:

<input type="number" class="form-control" min="0" max="100" step="0.1" />

它运行良好,我可以切换语言,所有页面文本(包括几乎所有数据验证错误消息)都将被翻译,数字以正确的格式显示(例如,1.00表示“en”,1.00表示“de”)


但是问题是:在德国文化中,当我有一个像1,5这样的十进制数字,并且我提交表单时,在我的控制器中它会变成15。只有当我将语言切换到“en”时,我才能得到正确的数字,因为十进制分隔符是预期的点。我还用其他语言得到了这个领域的一些验证消息。只是无法找出问题所在……

自定义模型绑定器可能会为该问题提供一个解决方案,但如果需要更好的方法,则必须安装一组cldr脚本以进行编号/日期/货币/等验证

  • 安装cldr库:
{
“版本”:“1.0”,
“defaultProvider”:“JSDeliver”,
“图书馆”:[
{
“图书馆”:cldrjs@0.5.1",
“目标”:“wwwroot/lib/cldr”
},
{
“图书馆”:“cldr-data@35.1.0",
“目标”:“wwwroot/lib/cldr数据”
},
{
“图书馆”:globalize@1.4.2",
“目标”:“wwwroot/lib/globalize”
}
]
}
  • 打开
    wwwroot/lib/cldr data/package.json
    文件,在最后一次关闭前添加以下代码:
“对等依赖项”:{
“cldr数据”:“>=26”
}
  • 使用要使用十进制验证的脚本:
  • 启动时注册
@使用LazZiya.TagHelpers
services.AddTransient();
  • 添加到_ViewImports.cshtml
  • 在脚本部分验证之后,在脚本部分插入html标记
@节脚本{
}
资料来源:


自定义型号活页夹可能会为该问题提供一种解决方法,但如果您需要更好的方法,则必须安装一组cldr脚本以进行编号/日期/货币/etc验证

  • 安装cldr库:
{
“版本”:“1.0”,
“defaultProvider”:“JSDeliver”,
“图书馆”:[
{
“图书馆”:cldrjs@0.5.1",
“目标”:“wwwroot/lib/cldr”
},
{
“图书馆”:“cldr-data@35.1.0",
“目标”:“wwwroot/lib/cldr数据”
},
{
“图书馆”:globalize@1.4.2",
“目标”:“wwwroot/lib/globalize”
}
]
}
  • 打开
    wwwroot/lib/cldr data/package.json
    文件,在最后一次关闭前添加以下代码:
“对等依赖项”:{
“cldr数据”:“>=26”
}
  • 使用要使用十进制验证的脚本:
  • 启动时注册
@使用LazZiya.TagHelpers
services.AddTransient();
  • 添加到_ViewImports.cshtml
  • 在脚本部分验证之后,在脚本部分插入html标记
@节脚本{
}
资料来源:


您使用的是3.0还是3.1?可能是这样吗?您的输入类型是文本还是数字?我的输入类型是数字,我使用3.1。看起来我也有同样的问题。哦,好吧,就我所能看到的,看起来他们正在把它推到5.0。不确定这个定制活页夹是否对您有帮助?定制模型活页夹做到了,非常感谢。您使用的是3.0还是3.1?可能是这样吗?您的输入类型是文本还是数字?我的输入类型是数字,我使用3.1。看起来我也有同样的问题。哦,好吧,就我所能看到的,看起来他们正在把它推到5.0。不确定这个定制活页夹是否对你有帮助?定制模型活页夹做到了,非常感谢。
<input type="number" class="form-control" min="0" max="100" step="0.1" />
<!-- cldr scripts (needed for globalize) -->
<script src="/lib/cldr/dist/cldr.min.js"></script>
<script src="/lib/cldr/dist/cldr/event.min.js"></script>
<script src="/lib/cldr/dist/cldr/supplemental.min.js"></script>

<!-- globalize scripts -->
<script src="/lib/globalize/dist/globalize.min.js"></script>
<script src="/lib/globalize/dist/globalize/number.min.js"></script>
<script src="/lib/globalize/dist/globalize/date.min.js"></script>
<script src="/lib/globalize/dist/globalize/currency.min.js"></script>

<!-- this file can be downloaded from : -->
<!-- https://github.com/johnnyreilly/jquery-validation-globalize -->
<script src="https://cdn.jsdelivr.net/gh/johnnyreilly/jquery-validation-globalize@1.0.0/jquery.validate.globalize.min.js"></script>

<!-- code to get check if current cultures scripts are exists -->
<!-- if not, select parent cultures scripts -->
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment HostingEnvironment
@{
    string GetDefaultLocale()
    {
        const string localePattern = "lib\\cldr-data\\main\\{0}";
        var currentCulture = System.Globalization.CultureInfo.CurrentCulture;
        var cultureToUse = "en"; //Default regionalisation to use

        if (System.IO.Directory.Exists(System.IO.Path.Combine(HostingEnvironment.WebRootPath, string.Format(localePattern, currentCulture.Name))))
            cultureToUse = currentCulture.Name;
        else if (System.IO.Directory.Exists(System.IO.Path.Combine(HostingEnvironment.WebRootPath, string.Format(localePattern, currentCulture.TwoLetterISOLanguageName))))
            cultureToUse = currentCulture.TwoLetterISOLanguageName;

        return cultureToUse;
    }
}

<script type="text/javascript">
    var culture = "@GetDefaultLocale()";
    $.when(
        $.get("/lib/cldr-data/supplemental/likelySubtags.json"),
        $.get("/lib/cldr-data/main/" + culture + "numbers.json"),
        $.get("/lib/cldr-data/main/" + culture + "/currencies.json"),
        $.get("/lib/cldr-data/supplemental/numberingSystems.json"),
        $.get("/lib/cldr-data/main/" + culture + "/ca-gregorian.json"),
        $.get("/lib/cldr-data/main/" + culture + "/timeZoneNames.json"),
        $.get("/lib/cldr-data/supplemental/timeData.json"),
        $.get("/lib/cldr-data/supplemental/weekData.json"),
    ).then(function () {
        // Normalize $.get results, we only need the JSON, not the request statuses.
        return [].slice.apply(arguments, [0]).map(function (result) {
            return result[0];
        });
    }).then(Globalize.load).then(function () {
        Globalize.locale(culture);
    });
</script>
PM > Install-Package LazZiya.TagHelpers
@addTagHelper *, LazZiya.TagHelpers
@section Scripts {
    <partial name="_ValidationScriptsPartial" />
    <localization-validation-scripts></localization-validation-scripts>
}