12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- using System.Collections.Generic;
- using System.Globalization;
- using System.IO;
- using System.Reflection;
- using System.Text.RegularExpressions;
- using System.Linq;
- using System;
- namespace NLangDetect.Core.Utils
- {
- public static class Messages
- {
- private static readonly Dictionary<string, string> _messages;
- static Messages()
- {
- _messages = LoadMessages();
- }
- public static string getString(string key)
- {
- string value;
- return
- _messages.TryGetValue(key, out value)
- ? value
- : string.Format("!{0}!", key);
- }
- private static Dictionary<string, string> LoadMessages()
- {
- var manifestName = typeof(Messages).Assembly.GetManifestResourceNames().FirstOrDefault(i => i.IndexOf("messages.properties", StringComparison.Ordinal) != -1) ;
- Stream messagesStream =
- typeof(Messages).Assembly
- .GetManifestResourceStream(manifestName);
- if (messagesStream == null)
- {
- throw new InternalException(string.Format("Couldn't get embedded resource named '{0}'.", manifestName));
- }
- using (messagesStream)
- using (var sr = new StreamReader(messagesStream))
- {
- var messages = new Dictionary<string, string>();
- while (!sr.EndOfStream)
- {
- string line = sr.ReadLine();
- if (string.IsNullOrEmpty(line))
- {
- continue;
- }
- string[] keyValue = line.Split('=');
- if (keyValue.Length != 2)
- {
- throw new InternalException(string.Format("Invalid format of the 'Messages.properties' resource. Offending line: '{0}'.", line.Trim()));
- }
- string key = keyValue[0];
- string value = UnescapeUnicodeString(keyValue[1]);
- messages.Add(key, value);
- }
- return messages;
- }
- }
- /// <remarks>
- /// Taken from: http://stackoverflow.com/questions/1615559/converting-unicode-strings-to-escaped-ascii-string/1615860#1615860
- /// </remarks>
- private static string UnescapeUnicodeString(string s)
- {
- if (s == null)
- {
- return null;
- }
- return
- Regex.Replace(
- s,
- @"\\u(?<Value>[a-zA-Z0-9]{4})",
- match => ((char)int.Parse(match.Groups["Value"].Value, NumberStyles.HexNumber)).ToString());
- }
- }
- }
|