我正在设计一个本地化的网络应用.我倾向于自动检测浏览器语言设置.但我注意到许多可敬的网站要求用户选择一种语言.是否有任何可用性问题(来自实际经验)只有自动检测用户语言?
谢谢.
locale localization web-applications cultureinfo browser-detection
我使用的是infragistics webgrid,需要格式化货币字符串.为此我需要一个包含模式的字符串,例如"$ ### ###,00",我希望这可以从我目前的CultureInfo中找到.我怎样才能做到这一点?我是否需要从以下信息中手动撰写:
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyGroupSeparator
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyGroupSizes
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyDecimalDigits
CultureInfo.CreateSpecificCulture(myLanguageId).NumberFormat.CurrencyDecimalSeparator
Run Code Online (Sandbox Code Playgroud)
等等
这是单线解决方案吗?
我遇到了一个使用内置全球化设施的ASP.NET应用程序崩溃的情况.
在具有Culture ="auto"指令的ASP.NET页面上,具有中性文化作为其浏览器语言的用户(例如"zh-Hans")将产生以下异常:
文化'zh-Hans'是一种中性文化.它不能用于格式化和解析,因此不能设置为线程的当前文化.
在System.Globalization.CultureInfo.CheckNeutral(CultureInfo文化)的System.Threading.Thread.set_CurrentCulture(CultureInfo值)在System.Web.UI.Page.set_Culture(字符串值)的ASP.somePage_aspx .__ BuildControlTree(somePage_aspx __ctrl)在ASP .somePage_aspx.FrameworkInitialize()
有任何想法吗?输入Culture/UICulture参数的垃圾通常似乎被忽略,但是这种情况导致了未处理的异常.
我正在开发一个C#应用程序.我想用逗号(,)改变数字十进制数字,其中我有点(.)使用正则表达式.
例如:
Price= 100,00.56
Run Code Online (Sandbox Code Playgroud)
作为表示数值的国际规则,但我瑞典他们有不同的数字方式
Price= 100.00,56
Run Code Online (Sandbox Code Playgroud)
所以我想使用RegEx将点(.)改为逗号(,)和逗号(,)改为点(.).可以指导我这个.
我在纳米比亚工作.纳米比亚不是Windows区域和语言设置的选项,但与南非共享大多数文化细节,因此我们选择英语南非,然后将货币符号自定义为"N $"(纳米比亚元)而不是"R"(南非兰特).
但是,我无法说服WPF使用自定义货币.string.format("{0:c}", foo)在代码中使用工作正常,但{Binding Path=SomeCurrencyValue, StringFormat=c在XAML中使用}`仍然使用"R"符号而不是自定义"N $"符号.
在App.xaml.cs我使用以下代码设置应用程序文化:
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(System.Globalization.CultureInfo.CurrentCulture.LCID, true);
FrameworkElement.LanguageProperty.OverrideMetadata(typeof(FrameworkElement),
new FrameworkPropertyMetadata(
System.Windows.Markup.XmlLanguage.GetLanguage(
System.Globalization.CultureInfo.CurrentUICulture.IetfLanguageTag)));
Run Code Online (Sandbox Code Playgroud)
作为演示,这里有一些显示问题的XAML代码:
<StackPanel>
<TextBlock>
Formatted in XAML with: <LineBreak/>
Text="{Binding Path=SomeCurrencyValue, StringFormat=c}" <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyValue, StringFormat=c, Mode=OneWay}"
Margin="5"/>
<TextBlock>
Formatted in code with: <LineBreak/>
return string.Format("{0:c}", SomeCurrencyValue); <LineBreak/>
Result:
</TextBlock>
<TextBox Text="{Binding Path=SomeCurrencyString, Mode=OneWay}"
Margin="5"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)
在DataContext对上述观点包含以下内容:
public double SomeCurrencyValue
{
get { return 34.95; }
}
public string SomeCurrencyString …Run Code Online (Sandbox Code Playgroud) 看着
DateTime.TryParseExact(dateString, "M/d/yyyy hh:mm:ss tt",
CultureInfo.InvariantCulture, 0, out dateValue)
Run Code Online (Sandbox Code Playgroud)
我提供了确切的结构来寻找: M/d/yyyy hh:mm:ss tt
题
如果是这样,我为什么CultureInfo还需要指定呢?
我需要将应用程序的当前文化更改为th-TH我尝试这样做以创建以下类型的对象,并且我打算将其分配给当前线程的CurrentCulture属性
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("en-US");
Run Code Online (Sandbox Code Playgroud)
但我正在使用的.NET Compact版本没有属性中的CurrentCulture System.Threading.Thread.CurrentThread属性.
我们有办法做到这一点吗?
编辑: 我可以更改移动设备的区域设置,然后当我运行应用程序时,我能够从正确的资源文件中获取正确的文本.
但是在使用安装项目安装应用程序时,我无法获得正确的资源
这就是我所做的.
我还验证了所需的文件夹,如fr-CA,th-TH等,是在我的应用程序的.exe存在的同一目录中创建的
我想写一个方法,从datetimeformat给我3个字母 - 代表日,月,年.
所以在en-US文化中我想要的返回值是(加上分隔符)
在de-DE中应该返回相同的方法
我查看了DateTimeFormatInfo类表单CurrentCulture,但只能找到分隔符你知道我怎么能得到其余的吗?
var culture = Thread.CurrentThread.CurrentCulture;
Console.WriteLine(culture.DateTimeFormat.DateSeparator);
Run Code Online (Sandbox Code Playgroud)
我需要这个,因为Excel中的TEXT函数不接受来自InvariantCulture的格式,只能从当前文化中处理它.
所以这样的东西在德语Excel版本中无效:
=TEXT(NOW();"dd.MM.yyyy")
Run Code Online (Sandbox Code Playgroud)
这需要设置
=TEXT(NOW();"TT.MM.JJJJ")
Run Code Online (Sandbox Code Playgroud)
(如果用VBA完成它并不重要,它不会被翻译)你可以看看下面的http://www.rondebruin.nl/win/s9/win013.htm
字符串格式可以是任何东西,因为用户可以按照他的喜好输入它,我需要将其翻译成当前的文化.
在使用文化信息时,将数字转换为double时,我遇到了奇怪的行为.使用荷兰文化进行
转换时"3,3",处理正确.如果我"3,3"使用美国文化转换,它会返回33.我期待一个错误.看我的例子:
static void Main(string[] args)
{
CultureInfo cultureDutch = new CultureInfo("nl-NL");
CultureInfo cultureUS = new CultureInfo("en-US");
System.Threading.Thread.CurrentThread.CurrentCulture = cultureDutch;
Console.WriteLine("Input 3,3 --> Expected 3,3");
Console.WriteLine("Output = " + Convert.ToDouble("3,3", cultureDutch));
// Actual result --> 3,3
Console.WriteLine("Input 3,3 --> Expected InvalidCastException");
Console.WriteLine("Output = " + Convert.ToDouble("3,3", cultureUS));
// Actual result --> 33
Console.WriteLine();
Console.WriteLine();
System.Threading.Thread.CurrentThread.CurrentCulture = cultureUS;
Console.WriteLine("Input 3.3 --> Expected InvalidCastException");
Console.WriteLine("Output = " + Convert.ToDouble("3.3", cultureDutch));
// Actual result --> 33
Console.WriteLine("Input …Run Code Online (Sandbox Code Playgroud) 我有以下单元测试,我从.Net Framework库移植到.Net核心xunint测试库.需要添加单元测试的项目是
https://github.com/dotliquid/dotliquid
并将被添加到所选文件中,如此处所示
我试图添加的单元测试是
[Test]
public void ParsingWithCommaDecimalSeparatorShouldWork()
{
var ci = new CultureInfo(CultureInfo.CurrentCulture.Name)
{
NumberFormat =
{
NumberDecimalSeparator = ","
, NumberGroupSeparator = "."
}
};
Thread.CurrentThread.CurrentCulture = ci;
var t = Template.Parse("{{2.5}}");
var result = t.Render( new Hash(), CultureInfo.InvariantCulture );
Assert.AreEqual( result, "2.5" );
}
Run Code Online (Sandbox Code Playgroud)
但是测试无法在dotnet核心中编译.
严重级代码描述项目文件行抑制状态错误CS1061"线程"不包含"CurrentCulture"的定义,并且没有可以找到接受"Thread"类型的第一个参数的扩展方法"CurrentCulture"(您是否缺少using指令或程序集引用?)DotLiquid.Tests(net451)C:\ Users\phelan\workspace\dotliquid\src\DotLiquid.Tests\OutputTests.cs 113 N/A
我需要对不同的文化进行不同的单元测试.我想创建一个XUnit理论,其中每个实例都在不同的文化中传递单元测试以进行验证.这是如何在.NetCore中完成的?