我试图获得用户首选语言.我看到各种关于如何设置它的文章,但是他们假设用户告诉它选择哪种语言(比如在下拉列表中).
在Firefox的工具>选项>内容>语言>选择下,您可以选择您喜欢的语言并选择他们的订单.我希望能够访问该列表,或者至少是C#代码隐藏中的首选语言.我该怎么做?这可能吗?
我尝试的所有东西总是返回en-US,无论列表中是什么.
某些课程中是否有某个属性可以告诉我当前的文化是否真的是默认文化.
类似于本地化与winforms的工作方式.如果语言是默认的,它会以表格形式说明.
让我们说如果我在en-US - 我怎么能通过代码告诉en.US是否是实际的默认值?
我需要为.net不支持的某些XML文件实现一些本地化,因此我想实现自己的...
并做它winforms如何工作,即
nameofxml.default.xml (this is the default local) nameofXml.de-de.xml (this is german)
等等
财产存在吗?
我正在使用C#开发SL5应用程序,我希望将其国际化.我发现以下内容来设置UI文化:
var culture = new CultureInfo(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Run Code Online (Sandbox Code Playgroud)
像DatePicker这样的一些控件似乎可以解决这个问题.如果我使用'd'格式字符串格式化任何日期时间,我仍然会得到默认格式"M/dd/yyyy".
究竟SL如何解释文化以及如何为整个应用程序正确设置?
谢谢
更新:
找到答案:
首先,在Application_Startup中设置适当的文化:
var culture = new CultureInfo("nl-BE");
Thread.CurrentThread.CurrentUICulture = culture;
Thread.CurrentThread.CurrentCulture = culture;
Run Code Online (Sandbox Code Playgroud)
然而,关键因素是添加以下内容以强制RootVisual的文化/语言:
var root = RootVisual as Page;
if (root != null)
{
root.Language = XmlLanguage.GetLanguage(Thread.CurrentThread.CurrentCulture.Name);
}
Run Code Online (Sandbox Code Playgroud) C#提供了一种获取当前日期的方法DateTime.Now.但问题是我的服务器在美国,而且在我使用时我得到美国时间DateTime.Now
有没有办法在C#中获取特定国家/地区的当前时间,因为我的用户来自世界各地?(我有每个用户的语言环境,所以如果我能获得每个语言环境的当前时间,那么我很安全)
我已经看过使用时区的方法,但后来我必须保持时区与国家参考.
我搜索过,这里的大部分问题都是关于将UTC时间转换为本地时间,反之亦然.希望有人能够启发我.
有任何方法可以将布尔值转换为本地化字符串.我试过了:
var x = true;
var culture = new CultureInfo("en-US")
x.ToString(culture) // returns True
culture = new CultureInfo("pt-BR")
x.ToString(culture) // returns True, expected Verdadeiro
Run Code Online (Sandbox Code Playgroud)
或者我应该在2020年之前开始输入开关吗?
我正在寻找一个.Net类/库与货币缩写词一起使用,就像TimeZoneInfo类与时区一样.
我需要使用这些首字母缩写填充下拉列表并将结果存储在数据库中.此值将用于在稍后阶段从Web检索最新的汇率.
有任何想法吗?
我已经构建了一个小的asp.net表单,可以搜索某些内容并显示结果.我想在搜索结果中突出显示搜索字符串.例:
Query: "p"
Results: a<b>p</b>ple, banana, <b>p</b>lum
Run Code Online (Sandbox Code Playgroud)
我的代码是这样的:
public static string HighlightSubstring(string text, string substring)
{
var index = text.IndexOf(substring, StringComparison.CurrentCultureIgnoreCase);
if(index == -1) return HttpUtility.HtmlEncode(text);
string p0, p1, p2;
text.SplitAt(index, index + substring.Length, out p0, out p1, out p2);
return HttpUtility.HtmlEncode(p0) + "<b>" + HttpUtility.HtmlEncode(p1) + "</b>" + HttpUtility.HtmlEncode(p2);
}
Run Code Online (Sandbox Code Playgroud)
我主要是工作,但尝试用例如HighlightSubstring("ß", "ss").这崩溃是因为在德国,"ß"和"ss"被认为是相同的IndexOf方法,但它们有不同的长度!
现在,如果有办法找出"文本"中的匹配有多长,那就没关系了.请记住,这个长度可以!= substring.Length.
那么如何找出IndexOf在存在连字和外来语言字符时出现的匹配长度(在这种情况下是连字)?
根据这个问题 的答案,async/await调用应该保留CurrentCulture.就我而言,当我调用自己的异步方法时,将保留CurrentCulture.但是,如果我调用某种WCF服务方法,则不会保留CurrentCulture,它会被更改为看起来像服务器默认线程文化的东西.
我已经了解了调用托管线程的内容.它发生在每个代码行都在一个托管线程上执行(ManagedThreadId保持不变).在调用我自己的异步方法后,CultureInfo保持不变.但是当我调用WCF的方法时,ManagedTrheadId保持不变,但CurrentCulture已更改.
简化的代码如下所示::
private async Task Test()
{
// Befoe this code Thread.CurrentThread.CurrentCulture is "ru-RU", i.e. the default server's culture
// Here we change current thread's culture to some desired culture, e.g. hu-HU
Thread.CurrentThread.CurrentCulture = new CultureInfo("hu-HU");
var intres = await GetIntAsync();
// after with await Thread.CurrentThread.CurrentCulture is still "hu-HU"
var wcfres = await wcfClient.GetResultAsync();
// And here Thread.CurrentThread.CurrentCulture is "ru-RU", i.e. the default server's culture
}
private async Task<int> GetIntAsync()
{
return await Task.FromResult(1);
} …Run Code Online (Sandbox Code Playgroud) 我有一个使用Tasks的应用程序.我们还修改了cultureInfo(我们使用EN-US语言,但保留日期/数字格式),我们使用.Net 4.0.
应用程序有很多线程和任务,我们有一个工厂来创建任务/线程.
对于该线程,我们有以下代码,以确保使用正确的CurrentCulture启动每个线程:
//This is basically only the constructor, but it describe well how we create the Thread:
public MonitoredThread(ThreadStart threadStart, string name, bool isBackground = false)
{
m_threadStart = threadStart;
m_name = name;
m_isBackground = isBackground;
Thread = new Thread(ThreadWorker)
{
Name = name,
IsBackground = isBackground,
CurrentCulture = CustomCultureInfo.CurrentCulture,
CurrentUICulture = CustomCultureInfo.CurrentCulture
};
}
Run Code Online (Sandbox Code Playgroud)
但是对于Tasks,我不知道如何实现这种机制:
public static Task ExecuteTask(Action action, string name)
{
MonitoredTask task = new MonitoredTask(action, name);
return Task.Factory.StartNew(task.TaskWorker);
}
Run Code Online (Sandbox Code Playgroud)
任何的想法?
我在Umm Al-Qura日历中有以下阿拉伯语日期,我要解析为.NET DateTime对象:
الأربعاء,17ذوالحجة,1436
此日期相当于公历中的2015年9月30日.
我一直在尝试使用以下"标准"C#代码来解析这个日期,但没有成功:
var cultureInfo = new CultureInfo("ar-SA");
cultureInfo.DateTimeFormat.Calendar = new UmAlQuraCalendar(); // the default one anyway
var dateFormat = "dddd? dd MMMM? yyyy"; //note the ? instead of ,
var dateString = "??????????? 17? ?? ??????? 1436";
DateTime date;
DateTime.TryParseExact(dateString, dateFormat, cultureInfo.DateTimeFormat, DateTimeStyles.AllowWhiteSpaces, out date);
Run Code Online (Sandbox Code Playgroud)
无论我做什么,结果TryParseExact总是如此false.如何在.NET中正确解析此字符串?
顺便说一句,如果我从一个DateTime对象开始,我可以ToString()在DateTime没有问题的情况下使用's overloads 创建上面的确切日期字符串.我显然不能以相反的方式做到这一点.
cultureinfo ×10
c# ×9
.net ×5
localization ×5
culture ×2
date ×2
datetime ×2
asp.net-mvc ×1
async-await ×1
encoding ×1
resx ×1
silverlight ×1
string ×1
wcf ×1