C# .Net核心剃须刀具有错误的文化
我有一个本地化的.Net Core 3应用程序。我的资源位于.resx文件中的单独程序集中。本地化设置为使用以下cookie: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
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库:
{
“版本”:“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标记
@节脚本{
}
资料来源:
<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>
}