| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | using System;using System.Collections.Generic;using System.Globalization;using System.IO;using System.Linq;using System.Text.RegularExpressions;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());        }    }}
 |