Advertisement
Guest User

Untitled

a guest
Sep 16th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Globalization;
  4. using System.Linq;
  5. using System.Runtime.InteropServices;
  6.  
  7. namespace GeoInfoService
  8. {
  9. public static class GeoInfoService
  10. {
  11. private static readonly Dictionary<string, (string EnglishName, int GeoId, string ISO2Code, string ISO3Code)> _regionCodeMapping
  12. = CultureInfo.GetCultures(CultureTypes.SpecificCultures)
  13. .Select(ci => new RegionInfo(ci.LCID))
  14. .GroupBy(ri => ri.TwoLetterISORegionName)
  15. .ToDictionary(
  16. g => g.Key,
  17. g => g.First().Transform(x => (x.EnglishName, x.GeoId, x.TwoLetterISORegionName, x.ThreeLetterISORegionName))
  18. );
  19.  
  20. public static string GetFriendlyName(string code)
  21. => _regionCodeMapping[code].EnglishName;
  22.  
  23. public enum SYSGEOTYPE
  24. {
  25. GEO_NATION = 0x0001,
  26. GEO_LATITUDE,
  27. GEO_LONGITUDE,
  28. GEO_ISO2,
  29. GEO_ISO3,
  30. GEO_RFC1766,
  31. GEO_LCID,
  32. GEO_FRIENDLYNAME,
  33. GEO_OFFICIALNAME,
  34. GEO_TIMEZONES,
  35. GEO_OFFICIALLANGUAGES,
  36. GEO_ISO_UN_NUMBER,
  37. GEO_PARENT,
  38. GEO_DIALINGCODE,
  39. GEO_CURRENCYCODE,
  40. GEO_CURRENCYSYMBOL,
  41. GEO_NAME,
  42. GEO_ID
  43. }
  44.  
  45. public static string GetGeoInfoEx(string geoId, SYSGEOTYPE geoType)
  46. {
  47. switch (geoType)
  48. {
  49. case SYSGEOTYPE.GEO_NATION:
  50. case SYSGEOTYPE.GEO_RFC1766:
  51. case SYSGEOTYPE.GEO_LCID:
  52. case SYSGEOTYPE.GEO_ID:
  53. throw new Exception("Not supported");
  54. case SYSGEOTYPE.GEO_TIMEZONES:
  55. case SYSGEOTYPE.GEO_OFFICIALLANGUAGES:
  56. throw new Exception("Not implemented in the system");
  57. case SYSGEOTYPE.GEO_LATITUDE:
  58. case SYSGEOTYPE.GEO_LONGITUDE:
  59. case SYSGEOTYPE.GEO_ISO2:
  60. case SYSGEOTYPE.GEO_ISO3:
  61. case SYSGEOTYPE.GEO_FRIENDLYNAME:
  62. case SYSGEOTYPE.GEO_OFFICIALNAME:
  63. case SYSGEOTYPE.GEO_ISO_UN_NUMBER:
  64. case SYSGEOTYPE.GEO_PARENT:
  65. case SYSGEOTYPE.GEO_DIALINGCODE:
  66. case SYSGEOTYPE.GEO_CURRENCYCODE:
  67. case SYSGEOTYPE.GEO_CURRENCYSYMBOL:
  68. case SYSGEOTYPE.GEO_NAME:
  69. break;
  70. default:
  71. throw new Exception("Unexpected SYSGEOTYPE value");
  72. }
  73.  
  74. string s = new string('\0', 256);
  75. int size = GetGeoInfoEx(geoId, geoType, s, 256);
  76. if (size <= 0) { return null; }
  77.  
  78. return s.Substring(0, size - 1);
  79. }
  80.  
  81. [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
  82. private extern static int GetGeoInfoEx(string location, SYSGEOTYPE geoType, string geoData, int geoDataCount);
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement