CultureInfoHelper.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Collections.Concurrent;
  3. using System.Globalization;
  4. using JetBrains.Annotations;
  5. namespace Abp.Localization
  6. {
  7. public static class CultureInfoHelper
  8. {
  9. private static readonly ConcurrentDictionary<string, CultureInfoCacheEntry> Cache = new ConcurrentDictionary<string, CultureInfoCacheEntry>();
  10. public static IDisposable Use([NotNull] string culture, string uiCulture = null)
  11. {
  12. Check.NotNull(culture, nameof(culture));
  13. return Use(CultureInfo.GetCultureInfo(culture), uiCulture == null ? null : CultureInfo.GetCultureInfo(uiCulture));
  14. }
  15. public static IDisposable Use([NotNull] CultureInfo culture, CultureInfo uiCulture = null)
  16. {
  17. Check.NotNull(culture, nameof(culture));
  18. var currentCulture = CultureInfo.CurrentCulture;
  19. var currentUiCulture = CultureInfo.CurrentUICulture;
  20. CultureInfo.CurrentCulture = culture;
  21. CultureInfo.CurrentUICulture = uiCulture ?? culture;
  22. return new DisposeAction(() =>
  23. {
  24. CultureInfo.CurrentCulture = currentCulture;
  25. CultureInfo.CurrentUICulture = currentUiCulture;
  26. });
  27. }
  28. /// <summary>
  29. /// This method is a temporary solution since CultureInfo.GetCultureInfo() does not exists in netstandard yet.
  30. /// </summary>
  31. [Obsolete("Use CultureInfo.GetCultureInfo instead!")]
  32. public static CultureInfo Get(string name)
  33. {
  34. if (name == null)
  35. {
  36. return null;
  37. }
  38. return Cache.GetOrAdd(name, n =>
  39. {
  40. return new CultureInfoCacheEntry(CultureInfo.ReadOnly(new CultureInfo(n)));
  41. }).CultureInfo;
  42. }
  43. private class CultureInfoCacheEntry
  44. {
  45. public CultureInfo CultureInfo { get; }
  46. public CultureInfoCacheEntry(CultureInfo cultureInfo)
  47. {
  48. CultureInfo = cultureInfo;
  49. }
  50. }
  51. }
  52. }