//
        // Load from Archive
        //

        private static void FillNamespaceFromArchieve(InternalFormat document, string Culture, string parentNamespaceName, UnrealNamespace <UnrealArchive> sourceArchieve)
        {
            // find namespace

            string resultNamespaceName = InternalNamespace.MakeName(parentNamespaceName, sourceArchieve.Namespace);

            InternalNamespace resultNamespace = null;

            foreach (var ns in document.Namespaces)
            {
                if (ns.Name == resultNamespaceName)
                {
                    resultNamespace = ns;
                    break;
                }
            }

            if (resultNamespace == null)
            {
                throw new FormatException("Can't find namespace for parent: '" + parentNamespaceName +
                                          "' and source '" + sourceArchieve.Namespace + "'");
            }

            // fill namespace from childs

            if (sourceArchieve.Children != null)
            {
                foreach (var child in sourceArchieve.Children)
                {
                    InternalText   text   = new InternalText();
                    InternalRecord record = resultNamespace[child.Key];

                    text.Culture = Culture;
                    if (record.Source != child.Source.Text)
                    {
                        text.Text = "";
                    }
                    else
                    {
                        text.Text = child.Translation.Text;
                    }

                    record.Translations.Add(text);
                }
            }

            // recursively repeat for all Subnamespaces

            if (sourceArchieve.Subnamespaces != null)
            {
                foreach (var subnamespace in sourceArchieve.Subnamespaces)
                {
                    FillNamespaceFromArchieve(document, Culture, resultNamespaceName, subnamespace);
                }
            }
        }
        //
        // Load from Manifest
        //

        private static void AppendNamespaceFromManifest(InternalFormat document,
                                                        string parentNamespaceName, UnrealNamespace <UnrealManifest> sourceNamespace)
        {
            InternalNamespace resultNamespace = new InternalNamespace();

            // generate namespace name

            resultNamespace.Name = InternalNamespace.MakeName(parentNamespaceName, sourceNamespace.Namespace);

            // fill from all Childrens records

            resultNamespace.Children = new List <InternalRecord>();
            if (sourceNamespace.Children != null)
            {
                foreach (var child in sourceNamespace.Children)
                {
                    foreach (var key in child.Keys)
                    {
                        InternalRecord record = new InternalRecord();
                        record.Source       = child.Source.Text;
                        record.Key          = key.Key;
                        record.Translations = new List <InternalText>();
                        record.Path         = key.Path;
                        resultNamespace.Children.Add(record);
                    }
                }
            }

            // add this namespace to List

            document.Namespaces.Add(resultNamespace);

            // recursive add all subnamespaces

            if (sourceNamespace.Subnamespaces != null)
            {
                foreach (var subnamespace in sourceNamespace.Subnamespaces)
                {
                    AppendNamespaceFromManifest(document, resultNamespace.Name, subnamespace);
                }
            }
        }