在C#中获取当前位置(在区域和语言中指定)

时间:2012-01-16 11:20:02

标签: c# localization

如何获取操作系统的区域和语言中指定的机器当前位置?我已经尝试从RegionInfo类中获取此函数,但它返回“区域和语言的格式”下拉列表中指定的位置。

只是为了澄清我的意思,如果您从机器的控制面板打开区域和语言,我想读取位置选项卡中指定的位置。 RegionInfo为我提供了格式选项卡格式下拉列表中指定的值。

4 个答案:

答案 0 :(得分:16)

经过大量的谷歌搜索,终于得到了答案。以下两个链接可帮助我获取当前的机器位置 -

http://social.msdn.microsoft.com/Forums/eu/csharpgeneral/thread/6dfaa142-c588-4cb0-b044-fa1e8138b299

http://www.siao2.com/2007/02/21/1733999.aspx

如果有人对最终代码感兴趣,我制作了以下实用程序类 -

public static class RegionAndLanguageHelper
{
    #region Constants

    private const int GEO_FRIENDLYNAME = 8;

    #endregion

    #region Private Enums

    private enum GeoClass : int
    {
        Nation = 16,
        Region = 14,
    };

    #endregion

    #region Win32 Declarations

    [DllImport("kernel32.dll", ExactSpelling = true, CallingConvention = CallingConvention.StdCall, SetLastError = true)]
    private static extern int GetUserGeoID(GeoClass geoClass);

    [DllImport("kernel32.dll")]
    private static extern int GetUserDefaultLCID();

    [DllImport("kernel32.dll")]
    private static extern int GetGeoInfo(int geoid, int geoType, StringBuilder lpGeoData, int cchData, int langid);

    #endregion

    #region Public Methods

    /// <summary>
    /// Returns machine current location as specified in Region and Language settings.
    /// </summary>
    public static string GetMachineCurrentLocation()
    {
        int geoId = GetUserGeoID(GeoClass.Nation); ;
        int lcid = GetUserDefaultLCID();
        StringBuilder locationBuffer = new StringBuilder(100);
        GetGeoInfo(geoId, GEO_FRIENDLYNAME, locationBuffer, locationBuffer.Capacity, lcid);

        return locationBuffer.ToString().Trim();
    }

    #endregion
}

答案 1 :(得分:1)

您可以尝试使用

RegionInfo.CurrentRegion.DisplayName;

这是否为您提供所需的位置名称

答案 2 :(得分:1)

基于&#34;控制面板&gt;区域&gt; Home Location&#34;,你可以获得RegionInfo。试试这个 -

var regKeyGeoId = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(@"Control Panel\International\Geo");
var geoID = (string)regKeyGeoId.GetValue("Nation");
var allRegions = CultureInfo.GetCultures(CultureTypes.SpecificCultures).Select(x => new RegionInfo(x.ToString()));
var regionInfo = allRegions.FirstOrDefault(r => r.GeoId == Int32.Parse(geoID));

答案 3 :(得分:0)

是的..但更容易:

CultureInfo info = CultureInfo.CurrentCulture;