从一个层次了这个问题,这将是(通过环)来存储所有可用的资源和相关的文化,允许特定文化的用户选择的方式是什么?
进一步说明:
假设有三个资源文件:
我可以在每个称为一个字符串LanguageName.我如何能够以编程方式循环遍历不同的LanguageName值以列出它们(例如列表框)?
编辑:WinForms项目,嵌入式资源.
我想将日期时间转换为瑞典文化.
DateTime.Today.ToString("dd MMMM yyyy");
Run Code Online (Sandbox Code Playgroud)
上面的代码行为给出了2013年12月27日的结果
我想要用瑞典语显示十二月的结果.
我使用ADO断开模式通过填充数据集ds从数据库获取数据.除日期字段外,所有数据都成立
string strDate = ds.Tables[0].Rows[0]["H_DT"].ToString();
Run Code Online (Sandbox Code Playgroud)
抛出异常说:
此日历不支持指定的时间.它应该在04/30/1900 00:00:00(格里高利日)和11/16/2077 23:59:59(格里高利日期)之间.
我试着写这段代码
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("ar-sa");
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("ar-sa");
Run Code Online (Sandbox Code Playgroud)
把文化改成阿拉伯语,但没有任何运气.
以下是变量快速监视的屏幕截图

只是试图理解 - 我以前从未使用过它.文化如何与ToUpper()/ ToLower()不同?
我已经构建了一个小的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在存在连字和外来语言字符时出现的匹配长度(在这种情况下是连字)?
我正在编写一些代码以将字符串解析为双精度型,但是此字符串是从另一台计算机传递给我的。自然会出现文化可能不同的问题。因此,虽然机器A可能发送给我:
"0.5"
Run Code Online (Sandbox Code Playgroud)
机器B可能会寄给我
"0,6"
Run Code Online (Sandbox Code Playgroud)
因为它在德国,有着不同的文化。
正确解析这两个输入的最佳方法是什么?有人建议使用CultureInfo.InvariantCulture作为参数,Convert.ToDouble但这不会仅在我生成上述字符串的地方提供帮助,而不是在其他人可以给我发送不同的字符串时提供帮助吗?
我是否认为我Thread.CurrentThread.CurrentCulture在转换之前需要了解原始语言并进行更改以匹配?
如果我有国家/语言组合的文化代码,是否可以从中找到文本方向.
例如,对于en-US,我如何从中得到文本方向从左到右?从ar-EG开始,我怎么知道文本方向是从右到左?
经过与Infragistics的长时间讨论后,看来带有SHIFT的ShortCuts在我的文化"nl-BE"中显示为MAJ.首先,文化"nl-BE"和AZERTY有点奇怪.如果想了解更多,请阅读http://en.wikipedia.org/wiki/AZERTY.重要的是:
其他键是相同的,即使传统上特殊键的名称用英语打印在它们上面.这是因为比利时主要是双语(法语 - 荷兰语)和官方三种语言(第三语言,德语,在东方语言中使用).
所以MAJ印刷为SHIFT.例如,在Office中,带有SHIFT的快捷方式显示为SHIFT.在Infragistics控件中,它们显示为MAJ.这让我们的客户感到沮丧.
因此,在与Infragistics讨论后,他们声称这是一个Windows Api调用,它返回MAJ而不是SHIFT.我从他们那里得到了一个展示行为的示例项目.所以现在我的问题是为什么Windows Api调用不会返回SHIFT,如果它是正常的,那么Office如何才能正确显示它?
获取密钥文本的代码是:
NativeWindowMethods.GetKeyNameText((int)scanCode, sb, 256);
Run Code Online (Sandbox Code Playgroud)
和
class NativeWindowMethods
{
#region MapVirtualKey
[DllImport("user32.dll")]
internal static extern int MapVirtualKey(uint uCode, uint uMapType);
#endregion //MapVirtualKey
#region GetKeyNameText
[DllImport("user32.dll", CharSet = CharSet.Auto)]
internal static extern int GetKeyNameText(
int lParam,
[MarshalAs(UnmanagedType.LPWStr), Out]System.Text.StringBuilder str,
int size);
#endregion //GetKeyNameText
}
Run Code Online (Sandbox Code Playgroud)
如果是Shiftkey,则扫描码为2752512(2a),并返回MAJ.
那么,我的问题是什么?
为了完整性,我将粘贴Utilities类的完整代码.从Form下一次调用完成:
systemLocalizedString = Utilities.GetLocalizedShortcutString(shortcut);
使用快捷键= ShiftF12.调用后,systemLocalizedString等于"MAJ + F12".
更新:在Hans Passant的帮助下,我下载了Microsoft Keyboard Layout Creator并导出了我当前的键盘布局.在.klc文件中没有找到MAJ,只有Shift(例如2a Shift).那么为什么user32.dll会返回MAJ?甚至更奇怪的是,当我复制.klc文件并将其安装为新键盘时,突然user32.dll确实为新安装的键盘返回Shift(虽然它是一个精确的副本).
Utilities.cs:
using System;
using System.Collections.Generic;
using System.Linq;
using …Run Code Online (Sandbox Code Playgroud) 我在一个需要显示价格的项目中使用Xamarin Forms(XAML).要显示我正在使用的格式正确的价格,StringFormat例如:
<Label Text="{Binding Price, StringFormat='{}{0:C}'}"/>
Run Code Online (Sandbox Code Playgroud)
结果取决于应用程序运行的设备的文化(德语:€,美国:$,...).我的目标始终是运用德国文化.根据adrianbanks的回答,这在WPF中是可行的.我尝试使用这种方法
<Label Text="{Binding Price, StringFormat='{}{0:C}', ConverterCulture='de-DE'}"/>
Run Code Online (Sandbox Code Playgroud)
但结果如下XamlParseException:
Xamarin.Forms.Xaml.XamlParseException:无法赋值属性"CultureInfo":属性不存在,或者不可赋值,或者值和属性之间的类型不匹配
似乎Xamarin Forms不提供此功能.我搜索了很多,但没有找到解决方法如何在XAML中设置格式化程序的文化.没有实现我自己的转换器,有没有想解决我的问题?
除了英国文化,我还有一些文字.例如:泰米尔文化.
如果我不提及文化,将采用默认英语.
如何将文本转换为语音(英语除外)?
代码段:
对于英语:
public static void ConvertTextToVoice()
{
SpeechSynthesizer speech = new SpeechSynthesizer();
speech.Volume = 100;
speech.Rate = 0;
speech.Speak("Welcome to india");
}
Run Code Online (Sandbox Code Playgroud)
对于其他语言:
public static void ConvertTextToVoice()
{
SpeechSynthesizer speech = new SpeechSynthesizer();
speech.Volume = 100;
speech.Rate = 0;
//Tamil Text
string text = "??????? ???? ??????? ????? ???????? ?????? ???? ???? ???";
PromptBuilder builder = new PromptBuilder(new System.Globalization.CultureInfo("ta-IN"));
builder.AppendText(text);
speech.SpeakAsync(builder);
}
Run Code Online (Sandbox Code Playgroud)