/Cloud/Library/Util/AppMessage.cs

# · C# · 171 lines · 84 code · 12 blank · 75 comment · 18 complexity · 37f69d4a1a9a38276718ed38ed03c9a4 MD5 · raw file

  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Web;
  6. namespace Library.Util
  7. {
  8. /// <summary>
  9. /// Sistemde kullanýlacak mesajlarla ilgili iţlemlerin yapýldýđý sýnýftýr.
  10. /// Sistemde kullanýlacak mesajlar Web.Config içerisinde AppSettings bölümünde MessageFile ile baţlayan özellikler ile belirtilir.
  11. /// Mesaj dosyalarýndaki boţ satýrlar ve # iţareti ile baţlayan satýrlar kullanýlmaz.
  12. /// </summary>
  13. public class AppMessage
  14. {
  15. /// <summary>
  16. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemini sađlayan metoddur.
  17. /// </summary>
  18. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  19. /// <param name="parts">Mesaj içerisinde {.} formatlarýnýn yerine kullanýlacak parametreler</param>
  20. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre formatlanacak mesajýn gösterilecek hali</returns>
  21. public static string Get(string messageCode, string[] parts)
  22. {
  23. if (!IsApplicationMessagesLoaded())
  24. LoadApplicationMessages(true);
  25. var messagesTable = (Hashtable)HttpContext.Current.Cache["ApplicationMessages"];
  26. var message = messagesTable[messageCode] as string;
  27. if (message == null)
  28. {
  29. message = messageCode;
  30. for (var i = 0; parts != null && i < parts.Length; i++)
  31. {
  32. if (message.IndexOf("{" + i + "}") == -1)
  33. message += " {" + i + "}";
  34. }
  35. }
  36. if (parts != null && parts.Length > 0)
  37. message = String.Format(message, parts);
  38. message = ExceptionTranslator.Translate(message);
  39. message = message.Replace("\r\n", "<br />");
  40. message = message.Replace("\t", " ");
  41. return message;
  42. }
  43. /// <summary>
  44. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemini gerektirmeyen mesaj kodlarýnda kullanýlýr.
  45. /// Kodun yazýlmasý sýrasýnda kolaylýk sađlamasý için yapýlmýţtýr.
  46. /// </summary>
  47. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  48. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre gösterilecek hali</returns>
  49. public static string Get(string messageCode)
  50. {
  51. return Get(messageCode, new string[] { });
  52. }
  53. /// <summary>
  54. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemi 1 parametre gerektiriyorsa kullanýlýr.
  55. /// Kodun yazýlmasý sýrasýnda kolaylýk sađlamasý için yapýlmýţtýr.
  56. /// </summary>
  57. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  58. /// <param name="part1">Mesajýn içerisinde bulunan {0} parametresi</param>
  59. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre formatlanacak mesajýn gösterilecek hali</returns>
  60. public static string Get(string messageCode, string part1)
  61. {
  62. var parts = new[] { part1 };
  63. return Get(messageCode, parts);
  64. }
  65. /// <summary>
  66. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemi 2 parametre gerektiriyorsa kullanýlýr.
  67. /// Kodun yazýlmasý sýrasýnda kolaylýk sađlamasý için yapýlmýţtýr.
  68. /// </summary>
  69. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  70. /// <param name="part1">Mesajýn içerisinde bulunan {0} parametresi</param>
  71. /// <param name="part2">Mesajýn içerisinde bulunan {1} parametresi</param>
  72. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre formatlanacak mesajýn gösterilecek hali</returns>
  73. public static string Get(string messageCode, string part1, string part2)
  74. {
  75. var parts = new[] { part1, part2 };
  76. return Get(messageCode, parts);
  77. }
  78. /// <summary>
  79. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemi 3 parametre gerektiriyorsa kullanýlýr.
  80. /// Kodun yazýlmasý sýrasýnda kolaylýk sađlamasý için yapýlmýţtýr.
  81. /// </summary>
  82. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  83. /// <param name="part1">Mesajýn içerisinde bulunan {0} parametresi</param>
  84. /// <param name="part2">Mesajýn içerisinde bulunan {1} parametresi</param>
  85. /// <param name="part3">Mesajýn içerisinde bulunan {2} parametresi</param>
  86. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre formatlanacak mesajýn gösterilecek hali</returns>
  87. public static string Get(string messageCode, string part1, string part2, string part3)
  88. {
  89. var parts = new[] { part1, part2, part3 };
  90. return Get(messageCode, parts);
  91. }
  92. /// <summary>
  93. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemi 4 parametre gerektiriyorsa kullanýlýr.
  94. /// Kodun yazýlmasý sýrasýnda kolaylýk sađlamasý için yapýlmýţtýr.
  95. /// </summary>
  96. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  97. /// <param name="part1">Mesajýn içerisinde bulunan {0} parametresi</param>
  98. /// <param name="part2">Mesajýn içerisinde bulunan {1} parametresi</param>
  99. /// <param name="part3">Mesajýn içerisinde bulunan {2} parametresi</param>
  100. /// <param name="part4">Mesajýn içerisinde bulunan {3} parametresi</param>
  101. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre formatlanacak mesajýn gösterilecek hali</returns>
  102. public static string Get(string messageCode, string part1, string part2, string part3, string part4)
  103. {
  104. var parts = new[] { part1, part2, part3, part4 };
  105. return Get(messageCode, parts);
  106. }
  107. /// <summary>
  108. /// Sistem mesajlarýnýn mesaj koduna göre getirilmesini ve String.Format iţlemi 4 parametre gerektiriyorsa kullanýlýr.
  109. /// Kodun yazýlmasý sýrasýnda kolaylýk sađlamasý için yapýlmýţtýr.
  110. /// </summary>
  111. /// <param name="messageCode">*.msg dosyasýnda belirtilen mesajýn kodu</param>
  112. /// <param name="part1">Mesajýn içerisinde bulunan {0} parametresi</param>
  113. /// <param name="part2">Mesajýn içerisinde bulunan {1} parametresi</param>
  114. /// <param name="part3">Mesajýn içerisinde bulunan {2} parametresi</param>
  115. /// <param name="part4">Mesajýn içerisinde bulunan {3} parametresi</param>
  116. /// <param name="part5">Mesajýn içerisinde bulunan {4} parametresi</param>
  117. /// <returns>*.msg dosyasýnda belirtilen mesajýn koduna göre formatlanacak mesajýn gösterilecek hali</returns>
  118. public static string Get(string messageCode, string part1, string part2, string part3, string part4, string part5)
  119. {
  120. var parts = new[] { part1, part2, part3, part4, part5 };
  121. return Get(messageCode, parts);
  122. }
  123. /// <summary>
  124. /// Sistem mesajlarýnýn cache'e yüklenmesini sađlar
  125. /// </summary>
  126. /// <param name="refreshMessageCache">False olduđu durumda mesajlar cache'de daha önce bulunuyorsa tekrar yüklenmez.</param>
  127. private static void LoadApplicationMessages(bool refreshMessageCache)
  128. {
  129. if (!IsApplicationMessagesLoaded() || refreshMessageCache)
  130. {
  131. Hashtable messageTable = GetAllApplicationMessages();
  132. HttpContext.Current.Cache["ApplicationMessages"] = messageTable;
  133. }
  134. }
  135. /// <summary>
  136. /// Sistem mesajlarýnýn cache'de bulunup bulunmadýđýný belirtir.
  137. /// </summary>
  138. /// <returns>Cache'de bulunuyorsa True, bulunmuyorsa False</returns>
  139. private static bool IsApplicationMessagesLoaded()
  140. {
  141. return HttpContext.Current != null && HttpContext.Current.Cache["ApplicationMessages"] != null;
  142. }
  143. /// <summary>
  144. /// Mesaj dosyalarýný okuyarak tek bir Hashtable nesnesine aktarýr.
  145. /// Ayný mesaj kodu, ayný dosyada veya farklý dosyalarda bulunuyorsa tekrar yüklenmez. Ýlk yüklenen kabul edilir.
  146. /// </summary>
  147. /// <returns>Mesajlarýn bulunduđu Hashtable nesnesini döndürür.</returns>
  148. private static Hashtable GetAllApplicationMessages()
  149. {
  150. var messageFiles = FrameworkUtil.GetApplicationSettingsStartsWith("MessageFile");
  151. var messageTable = new Hashtable();
  152. foreach (string message in messageFiles.Cast<object>().Select(messageFile => File.ReadAllLines(HttpContext.Current.Server.MapPath("~/" + messageFile))).SelectMany(messages => messages.Where(message => !Cast.IsNull(message.Trim()) && !message.StartsWith("#") && !messageTable.ContainsKey(message.Split('=')[0]))))
  153. {
  154. messageTable.Add(message.Split('=')[0], message.Split('=')[1]);
  155. }
  156. return messageTable;
  157. }
  158. }
  159. }