private void GenerateLookupForLocaleImpl( Dictionary <string, NamespaceReferenceTemplate> lookup, Locale locale, NamespaceTreeNode node, string namespaceBuilder) { string localizedName = null; Namespace representative = null; foreach (Namespace ns in node.OriginalDefinitions) { if (ns.NamesByLocale.ContainsKey(locale)) { string newLocalizedName = ns.NamesByLocale[locale][node.OffsetFromRoot - ns.NestDepth]; if (localizedName != null && newLocalizedName != localizedName) { TODO.ThisErrorMessageIsNotVeryHelpeful(); throw new ParserException(ns, "This namespace definition has a different localized name somewhere else."); } localizedName = newLocalizedName; representative = ns; } } if (node.LeafName != "*") { if (localizedName == null) { localizedName = node.LeafName; } namespaceBuilder = namespaceBuilder == null ? localizedName : (namespaceBuilder + "." + localizedName); } if (namespaceBuilder != null) { lookup[namespaceBuilder] = new NamespaceReferenceTemplate() { Name = namespaceBuilder, OriginalNamespace = representative ?? node.OriginalDefinitions[0], OriginalNamespaceDepthClipping = namespaceBuilder.Split('.').Length, }; } foreach (NamespaceTreeNode child in node.Children.Values) { this.GenerateLookupForLocaleImpl(lookup, locale, child, namespaceBuilder); } }