当欲望文化与PC中安装的文化不同时,如何在.Net中设置国际化DateTimepicker或Calendar WinForm控制?
给定一个特定的国家代码,例如"CH",我如何获得CultureInfo对象?特定的国家/地区代码是动态的(在运行时更改).我只有国家代码,我想知道是否有可能从创建CultureInfo对象只是国家代码.我得到的确切文化无关紧要(fr-CH/de-CH).
我正在尝试做这样的事情:
CultureInfo c = CultureInfo.CreateSpecificCulture("CH");
Run Code Online (Sandbox Code Playgroud)
是否可以从RegionInfo对象创建文化?然后它看起来像这样:
RegionInfo r= new RegionInfo("CH");
CultureInfo c = CultureInfo.CreateSpecificCulture(r);
Run Code Online (Sandbox Code Playgroud)
显然前面的例子没有编译,他们只是想知道我想要实现的目标.
具有文化的MVC页面取决于用户.在搜索选项中(搜索可以通过DueDate完成),我需要在DueDate文本框上有一个掩码.面具必须依赖于用户的文化.在js和cshtml中都有一个错误说:mask.split is not a function.将我jquery.maskedinput-1.2.3.js从.更改make.split为make.toString().split并且错误消失了,但必须看起来像这样:[object Object]或者有一些01数字.任何的想法?代码cshtml如下所示:
<script type="text/javascript">
$(function () {
var maskFormat = @Html.CurrentDateMask();
$(".DateBox").mask(maskFormat);
});
</script>
Run Code Online (Sandbox Code Playgroud) 请考虑以下Console App代码:
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
DateTime date = new DateTime(2014, 01, 19);
Console.WriteLine("{0}", date); // Prints 19/01/2014
Debug.WriteLine("{0}", date); // Prints 01/19/2014
Debug.WriteLine(date); // Prints 19/01/2014
Run Code Online (Sandbox Code Playgroud)
如评论中所述,Console.WriteLine()打印19/01/2014时Debug.WriteLine()打印01/19/2014.
更糟糕的是 - Debug.WriteLine("{0}", date)给出不同的输出Debug.WriteLine(date)......
是否会Debug.WriteLine()忽略线程的文化设置?
有没有办法Debug.WriteLine()利用线程的文化设置?或者我必须使用String.Format()并将结果传递给Debug.WriteLine()?
(注意:我在Windows 8.1 64位,en-GB上使用Visual Studio 2013和.Net 4.51以及AnyCPU调试版本运行.)
我在我们拼着性英国LL两个L的编辑.我想使用代码分析规则"CA1726:UsePreferredTerms"但我不希望它将"已取消"标记为违规.
我已经尝试添加<CodeAnalysisCulture>en-GB</CodeAnalysisCulture>到项目文件中以鼓励代码分析使用英语拼写
我已经尝试将<Recognized><Word>Cancelled</Word></Recognized>项目添加到CustomDictionary.xml中
每次使用取消的单词时,我都不热衷于添加抑制.
我想要一个可以检查到源代码控制的解决方案,供其他开发人员使用,所以我不想改变我的本地
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Team Tools\Static Analysis Tools\FxCop\CustomDictionary.xml
我正在使用Visual Studio 2013.
有没有办法实现这个目标?
culture code-analysis fxcop visual-studio visual-studio-2013
如果我将Texta 绑定TextBox到float属性,则显示的文本不符合系统十进制(点或逗号).相反,它总是显示一个点('.').但是如果我在a中显示值MessageBox(使用ToString()),则使用正确的System Decimal.

XAML
<StackPanel>
<TextBox Name="floatTextBox"
Text="{Binding FloatValue}"
Width="75"
Height="23"
HorizontalAlignment="Left"/>
<Button Name="displayValueButton"
Content="Display value"
Width="75"
Height="23"
HorizontalAlignment="Left"
Click="displayValueButton_Click"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
代码背后
public MainWindow()
{
InitializeComponent();
FloatValue = 1.234f;
this.DataContext = this;
}
public float FloatValue
{
get;
set;
}
private void displayValueButton_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show(FloatValue.ToString());
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经用一个转换器解决了这个问题,转换器用系统十进制取代了dot(这是有效的),但这是必要的原因是什么?这是设计,是否有更简单的方法来解决这个问题?
SystemDecimalConverter(以防其他人遇到同样的问题)
public class SystemDecimalConverter : IValueConverter
{
private char m_systemDecimal = '#';
public SystemDecimalConverter()
{
m_systemDecimal = GetSystemDecimal();
}
object IValueConverter.Convert(object value, Type …Run Code Online (Sandbox Code Playgroud) Globalize.js允许您根据应用的当前区域性解析日期字符串
var date = Globalize.parseDate("17/07/2013"); //Wed Jul 17 00:00:00 PDT 2013
Run Code Online (Sandbox Code Playgroud)
我想做的是解析DateTime.javascript Date对象处理这个,我很惊讶Globalize.js库没有.
var date = new Date("07/17/2013 11:55 pm"); //Wed Jul 17 23:55:00 PDT 2013
var date = Globalize.parseDate("07/17/2013 11:55 pm"); //null
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?我倾向于自己解析时间部分.是否有另一个扩展的库Globalize.js提供这种功能?我环顾四周但却找不到多少.
更新w /接受的答案
如果您知道日期所在的格式,则可以解析日期.
var date = Globalize.parseDate("17/07/2013 11:55 pm", "MM/dd/yyyy hh:mm tt");
//date = null
Run Code Online (Sandbox Code Playgroud)
在我的示例中,日期将为null,因为它期望时间段的格式为a.m或p.m..一旦我改变了,我就能解析一个日期时间.
var date = Globalize.parseDate("17/07/2013 11:55 p.m.", "MM/dd/yyyy hh:mm tt");
//date = Wed Jul 17 23:55:00 PDT 2013
Run Code Online (Sandbox Code Playgroud)
注意:这仅适用于弃用的 Globalize …
我在这里的"返回"行有一个断点:
[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
return NRBQClient.GetTestMessage(id1, id2);
}
Run Code Online (Sandbox Code Playgroud)
虽然它没有崩溃应用程序,当我达到这一点,我得到,
" Exception:Thrown:"不支持文化."(System.Globalization.CultureNotFoundException)抛出了System.Globalization.CultureNotFoundException:"不支持文化. "
试图支持哪种文化,为什么不支持这种文化,以及我应该做些什么来支持这种文化?
回答sphanley:
除了代表"BarbeQue的新骑士"之外,它还是一个"骨架"(现在)实体看起来像这样:
public class NRBQEntity
{
public NRBQEntity()
{
}
public String Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
对AnotherUser的回答:
这不是我的代码,所以我只是在试图理解它; 它作为一个起点提供给我复制/重构一个现有的独立项目,并将其纳入"解决方案".已经说过,回答你的问题,这里是解决方案中"GetTestMessage()"的所有实例:
[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
return NRBQClient.GetTestMessage(id1, id2);
}
[HttpGet]
[Route("api/Test/{id1}/{id2}")]
public NRBQEntity GetTestMessage(String id1, String id2)
{
return NRBQService.GetNRBQEntity(id1, id2);
}
public interface INRBQClient
{
NRBQEntity GetTestMessage(String id1, String id2);
}
public NRBQEntity …Run Code Online (Sandbox Code Playgroud) 为什么英语(加勒比海)的文化名称为"en-029"?
我知道"en-CA"用于英语(加拿大),但为什么029?它意味着什么?为什么选择它?
如何调用ToString()对象并使其使用不变文化?在ToString()实现的对象上有重载IConvertible(比如bool,int,float ..),但如果有问题的对象怎么IConvertible办?
culture ×10
c# ×6
.net ×4
cultureinfo ×3
asp.net ×1
asp.net-mvc ×1
datetime ×1
formatting ×1
fxcop ×1
html-helper ×1
javascript ×1
jquery ×1
region ×1
textbox ×1
wpf ×1
wpf-controls ×1