c# – 是/否系统值

有没有办法在.Net框架中获得系统语言的是/否值?

当我只需要是和否时,我不想为每种语言制作语言文件…

您确实可以使用Windows资源。

我曾经做过一个例子(不幸的是在Delphi中),但你也可以在Dotnet中做到这一点。 它可能非常有用,您不仅限于“是”和“否”,而是可以使用“您想继续……”之类的短语。

http://www.martinstoeckli.ch/delphi/delphi.html#StringWindowsRes

抱歉,我无法在C#中提供示例。

编辑:好吧,现在我找到了在C#写一个小class的时间:

internal static class StoWindowsString { ///  /// Searches for a text resource in a Windows library. /// Sometimes, using the existing Windows resources, you can /// make your code language independent and you don't have to /// care about translation problems. ///  ///  /// btnCancel.Text = StoWindowsString.Load("user32.dll", 801, "Cancel"); /// btnYes.Text = StoWindowsString.Load("user32.dll", 805, "Yes"); ///  /// Name of the windows library like /// "user32.dll" or "shell32.dll" /// Id of the string resource. /// Return this text, if the resource /// string could not be found. /// Desired string if the resource was found, otherwise /// the DefaultText public static string Load(string libraryName, uint Ident, string DefaultText) { IntPtr libraryHandle = GetModuleHandle(libraryName); if (libraryHandle != IntPtr.Zero) { StringBuilder sb = new StringBuilder(1024); int size = LoadString(libraryHandle, Ident, sb, 1024); if (size > 0) return sb.ToString(); else return DefaultText; } else { return DefaultText; } } [DllImport("kernel32.dll", CharSet=CharSet.Auto)] private static extern IntPtr GetModuleHandle(string lpModuleName); [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax); } 

我找到了解决方案:

 class Program { [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax); [DllImport("kernel32")] static extern IntPtr LoadLibrary(string lpFileName); static void Main(string[] args) { StringBuilder sb = new StringBuilder(256); IntPtr user32 = LoadLibrary(Environment.SystemDirectory + "\\User32.dll"); LoadString(user32, 805, sb, sb.Capacity); YES = sb.ToString().Replace("&",""); LoadString(user32, 806, sb, sb.Capacity); NO = sb.ToString().Replace("&",""); } public static string YES; public static string NO; } 

您可以采用通用方法并使用图片。

在此处输入图像描述在此处输入图像描述在此处输入图像描述

您可以创建自己的,忽略使用上面两个图像中显示的单词,并使用Check和X图像。 我把它用于我们的工厂工人,他们不仅是文盲,而且有时非英语。

你可以这样做:

  public static class YesNo{ public static string GetYesOrNo(this bool boolean) { var dictionary = boolean ? _yesDictionary : _noDictionary; if(dictionary.ContainsKey(CultureInfo.CurrentUICulture.TwoLetterISOLanguageName)) { return dictionary[CultureInfo.CurrentUICulture.TwoLetterISOLanguageName]; } return boolean ? DEFAULT_YES : DEFAULT_NO; } const string DEFAULT_YES = "yes"; const string DEFAULT_NO = "no"; private static readonly Dictionary _yesDictionary = new Dictionary { {"en","yes"}, {"de", "ja"}, {"es", "si"} }; private static readonly Dictionary _noDictionary = new Dictionary { {"en", "no"}, {"de", "nein"}, {"es", "no"} }; } 

这也可能是使用本地化资源文件查找翻译值的情况。