System.Globalization.Localization.LoadFromReader C# (CSharp) Method

LoadFromReader() public method

Add Localization messages from the specified TextReader (which hopefully points at a .po file) Doesn't initialize the collection, so it can be called from a loop if needed.
public LoadFromReader ( TextReader reader ) : void
reader TextReader
return void
        public void LoadFromReader(TextReader reader)
        {
            string line;
            Message message = new Message();
            NodeType lastNode = NodeType.WhiteSpace;
            while (null != (line = reader.ReadLine()))
            {
                if (String.IsNullOrEmpty(line))
                {
                    // new message block
                    if (message.MsgID != "")
                    {
                        if (!Messages.ContainsKey(message.MsgID))
                        {
                            Messages.Add(message.MsgID, message);
                        }
                        if (!MessagesByAutoID.ContainsKey(message.AutoID))
                        {
                            MessagesByAutoID.Add(message.AutoID, message);
                        }
                    }
                    message = new Message();
                    continue;
                }
                NodeType node = GetNodeType(line);

                switch (node)
                {
                    case NodeType.TranslatorComment:
                        if (LoadComments)
                            message.TranslatorComments.Add(line.Substring(1));
                        break;
                    case NodeType.ExtractedComment:
                        if (LoadComments)
                            message.ExtractedComments.Add(line.Substring(2));
                        break;
                    case NodeType.Reference:
                        if (LoadComments)
                            message.Contexts.Add(line.Substring(2).Trim());
                        break;
                    case NodeType.Flag:
                        //flags are ignored for now
                        //if (LoadComments)
                        //    message.Comments.Add(line.Substring(2).Trim());
                        break;
                    case NodeType.PreviousUntranslatedString:
                        //previous untranslated strings are ingored for now
                        break;
                    case NodeType.MsgID:
                        message.MsgID = Unescape(line.Substring(6));
                        lastNode = node;
                        break;
                    case NodeType.MsgID_Plural:
                        message.MsgID_Plural = Unescape(line.Substring(13));
                        lastNode = node;
                        break;
                    case NodeType.MsgStr:
                        message.MsgStr = Unescape(line.Substring(7));
                        lastNode = node;
                        break;
                    case NodeType.MsgStrWithBrakets:
                        message.MsgStr = Unescape(line.Substring(10));
                        lastNode = node;
                        break;
                    case NodeType.MsgStr_Plural:
                        message.MsgStr_Plural = Unescape(line.Substring(10));
                        lastNode = node;
                        break;
                    case NodeType.Continued:
                        //if (!string.IsNullOrEmpty(message.MsgID))
                            switch (lastNode)
                            {

                                case NodeType.MsgID:
                                    message.MsgID += Unescape(line);
                                    break;
                                case NodeType.MsgID_Plural:
                                    message.MsgID_Plural += Unescape(line);
                                    break;
                                case NodeType.MsgStr:
                                case NodeType.MsgStrWithBrakets:
                                    message.MsgStr += Unescape(line);
                                    break;
                                case NodeType.MsgStr_Plural:
                                    message.MsgStr_Plural += Unescape(line);
                                    break;
                            }
                        break;
                    case NodeType.WhiteSpace:
                    default:
                        break;
                }
            }
            // put away the last one
            if (message.MsgID != "")
            {
                Messages.Add(message.MsgID, message);
                MessagesByAutoID.Add(message.AutoID, message);
                message = new Message();
            }
            reader.Close();
        }