/// <summary> /// Adds a resource to the resources. If the resource is a string, /// it will be saved that way, otherwise it will be serialized /// and stored as in binary. /// </summary> private void AddDataRow(string elementName, string name, object value) { Debug.WriteLineIf(ResValueProviderSwitch.TraceVerbose, " resx: adding resource " + name); switch (value) { case string str: AddDataRow(elementName, name, str); break; case byte[] bytes: AddDataRow(elementName, name, bytes); break; case ResXFileRef fileRef: { ResXDataNode node = new ResXDataNode(name, fileRef, typeNameConverter); DataNodeInfo info = node.GetDataNodeInfo(); AddDataRow(elementName, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); break; } default: { ResXDataNode node = new ResXDataNode(name, value, typeNameConverter); DataNodeInfo info = node.GetDataNodeInfo(); AddDataRow(elementName, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); break; } } }
/// <summary> /// Adds a string resource to the resources. /// </summary> public void AddResource(ResXDataNode node) { // we're modifying the node as we're adding it to the resxwriter // this is BAD, so we clone it. adding it to a writer doesnt change it // we're messing with a copy ResXDataNode nodeClone = node.DeepClone(); ResXFileRef fileRef = nodeClone.FileRef; string modifiedBasePath = BasePath; if (!string.IsNullOrEmpty(modifiedBasePath)) { if (!modifiedBasePath.EndsWith("\\")) { modifiedBasePath += "\\"; } fileRef?.MakeFilePathRelative(modifiedBasePath); } DataNodeInfo info = nodeClone.GetDataNodeInfo(); AddDataRow(DataStr, info.Name, info.ValueData, info.TypeName, info.MimeType, info.Comment); }