我正在尝试查看用户是否在文本框中按了小数点分隔符,并根据其他参数允许或禁止它.
NumberdecimalSeparator返回46或'.' 在我的美国系统上.许多其他国家使用','作为分隔符.当我按下句点时,KeyDown事件将KeyValue设置为190.
我只是继续寻找逗号/句号,还是有更好的方法?
我们有一个多语言网站,利用asp.net 2.0文化.通过将url重写为查询字符串来设置当前文化.(〜/ es/blah.aspx是〜/ blah.aspx的西班牙语版本 - 改写为〜/ blah.aspx?lang = es)
测试文化的代码如下:
System.Globalization.CultureInfo ci;
try
{
ci = new System.Globalization.CultureInfo(Request.QueryString["lang"] ?? string.Empty);
}
catch
{
ci = new System.Globalization.CultureInfo(string.Empty);
}
Run Code Online (Sandbox Code Playgroud)
如果没有文化集,则默认为英语,127.当存在文化时,该页面上的所有链接都将使用正确的文化名称预先设置.
一些蜘蛛如何以〜/ www.test.com/blah.aspx的形式获得了一些链接,并用www.test.com的文化锤击我们的网站,并充斥着我们的错误记录.
除了捕获异常之外,有没有办法测试文化名称是否有效?
我有一个C#类有各种方法.我想en-US在这个类的所有方法中使用culture.我可以为特定班级设置文化吗?
背景:我有List<object>一些,有些object是数字,有些是字符串.我想用美国文化写的所有数字,但我不知道哪些是数字.这个object班ToString()似乎没有采取文化论证.
我目前正在开发一个Silverlight应用程序.我有一些datagrids/textblocks,我使用标准绑定来显示值,其中一些是日期.例如
<sdk:DataGrid AutoGenerateColumns="False" IsReadOnly="True" ItemsSource="{Binding Path=MyCollection}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding Path=Name, Mode=OneWay}" Header="Agent"/>
<sdk:DataGridTextColumn Binding="{Binding Path=UpdateTime, Mode=OneWay}" Header="Update Time"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
<TextBlock Text="{Binding Path=LastUpdatedTime}"/>
Run Code Online (Sandbox Code Playgroud)
这个结合得很好,但是日期总是显示为美式(m/d/y),而我想要显示它们的英国风格(d/m/y).我尝试使用托管应用程序的页面上的HTML标记设置文化
<param name="uiculture" value="en-GB" />
<param name="culture" value="en-GB" />
Run Code Online (Sandbox Code Playgroud)
和Application_Start我的Silverlight应用程序的
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-GB");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
Run Code Online (Sandbox Code Playgroud)
但这些都没有任何区别.我有一个实现IValueConverter接口的自定义类,我在Convert方法上添加了一个断点,传入的CultureInfo参数是en-US,我该如何更改文化?
考虑这种比较:
String a = "\u00C4"; // "LATIN CAPITAL LETTER A WITH DIAERESIS"
String b = "\u0041\u0308"; // "LATIN CAPITAL LETTER A" and "COMBINING DIAERESIS"
Run Code Online (Sandbox Code Playgroud)
在C#丹麦文化中比较这些,返回false:
Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK", false);
Console.WriteLine(a.Equals(b, StringComparison.CurrentCulture)); // false
Run Code Online (Sandbox Code Playgroud)
在Java丹麦语区域中比较这些,返回true:
System.out.println(Collator.getInstance(new Locale("Danish (Denmark)").equals(a,b)); // true
Run Code Online (Sandbox Code Playgroud)
我列出了两种环境中的所有语言环境/文化,并确认选择了正确的语言环境/文化.我错过了什么吗?有什么区别?
在MVC中你可以做到
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy h:mm tt}"]
Run Code Online (Sandbox Code Playgroud)
这将转化为
10/12/2011 1:30 PM
这对于en-US用户来说是正确的
但是让我们说瑞典用户访问该网站(sv-SE)
然后我想要
2011-10-12 13:30
所以我不能使用格式字符串..如果我从模型中删除格式属性我会得到
2011年12月10日下午1:30:20为en-US和2011-10-12 13:30:20为sv-SE
如何在没有秒的情况下获得正确的格式?
我们有两个相同的字母'ی'和'ي',第一个作为主要信件在Windows 7之后出现.
回到旧版XP,我们将第二个作为主要版本.
现在,如果一个客户端在Windows XP上,另一个客户端在Windows 7上,我得到的输入被确定为不同.
我也尝试过使用波斯文化而没有成功.
我错过了什么吗?
编辑:不得不改变单词以便更好地理解..现在它们看起来很相似.
foreach (CompareOptions i in Enum.GetValues(new CompareOptions().GetType()).OfType<CompareOptions>())
Console.WriteLine( string.Compare("??????", "??????", new CultureInfo("fa-ir"), i) + "\t : " + i );
Run Code Online (Sandbox Code Playgroud)
产出:
-1 : None
-1 : IgnoreCase
-1 : IgnoreNonSpace
-1 : IgnoreSymbols
-1 : IgnoreKanaType
-1 : IgnoreWidth
1 : OrdinalIgnoreCase
-1 : StringSort
130 : Ordinal
Run Code Online (Sandbox Code Playgroud) 我需要从浏览器的语言中获取文化字符串。
我考虑过从javascript这样获取代码:
var userLang = navigator.language || navigator.userLanguage;
Run Code Online (Sandbox Code Playgroud)
但这只给了我从.NET获得的文化信息的第一部分:
Thread.CurrentThread.CurrentCulture.Name;
Run Code Online (Sandbox Code Playgroud)
因此,javascript为我提供了“ de”或“ pl”,而不是.NET中的“ de-DE”或“ pl-PL”。有没有办法获取“完整信息”?
我目前有一个需要支持多种文化的应用程序。一个日期字符串被传入并被解析为一个DateTime对象。为了允许多种文化,我首先设置线程的文化和UICulture。
这是我的代码示例:
首先,我为此线程设置了区域性。这是通过URL(例如en-us,en-ca,fr-ca)传递的:
CultureInfo ci = new CultureInfo(culture, false);
Thread.CurrentThread.CurrentUICulture = ci;
Thread.CurrentThread.CurrentCulture = ci;
Run Code Online (Sandbox Code Playgroud)
然后,我将一个也传入URL的日期字符串转换为DateTime。根据文化的不同,日期将以mm / dd / yyyy或dd / mm / yyyy传递。
我用以下代码解析日期字符串:
DateTime DateTimeObject;
bool validDate = DateTime.TryParse(DateStringFromURL, Thread.CurrentThread.CurrentCulture, DateTimeStyles.None, out DateTimeObject);
Run Code Online (Sandbox Code Playgroud)
TryParse适用于大多数区域性,并提供了有效的datetime对象。但是,en-ca和fr-ca会出现问题。如果传入了错误的格式,则日期字符串将无法正确解析。
下面显示了每种文化.NET似乎期望的格式:
dd/MM/yyyy MM/dd/yyyy
EN-CA Valid Invalid
FR-CA Invalid Valid
Run Code Online (Sandbox Code Playgroud)
编辑:更确切地说,这里是导致我出现问题的示例:
对于EN-CA:
DateTime.Parse("26/08/2014") //VALID
DateTime.Parse("08/26/2014") //EXCEPTION THROWN
Run Code Online (Sandbox Code Playgroud)
对于FR-CA:
DateTime.Parse("26/08/2014") //EXCEPTION THROWN
DateTime.Parse("08/26/2014") //VALID
Run Code Online (Sandbox Code Playgroud)
这与其他系统如何处理这种文化的日期格式相反。
为什么格式看似倒退?这是.NET 4.5的错误吗?
任何和所有帮助将不胜感激,谢谢。
注意:.NET版本4.5
我注意到,当使用框架函数string.Format格式化货币值时,在某些文化中,此函数默认情况下会舍入小数.例如,在使用马来西亚林吉特时:
CultureInfo culture = new CultureInfo("ms-MY");
someLabel.Content = string.Format(culture,"{0:C}", 1.64m);
Run Code Online (Sandbox Code Playgroud)
产出:RM2
但是,当使用其他货币(如美元,欧元或其他货币)时,您将获得原始值,例如:
CultureInfo culture = new CultureInfo("sv-SE");
someLabel.Content = string.Format(culture,"{0:C}", 1.64m);
Run Code Online (Sandbox Code Playgroud)
产量:1.64kr
我知道我可以指定CultureInfo类中的小数位数,但问题是,为什么这种情况发生在一些货币而不是其他货币?预计一些货币默认为四舍五入?
culture ×10
c# ×8
.net ×4
asp.net ×2
cultureinfo ×2
localization ×2
datetime ×1
java ×1
javascript ×1
locale ×1
methods ×1
silverlight ×1
vb.net ×1