/// <summary> /// Add a localization file. /// </summary> /// <param name="localization">The localization file to add.</param> public void AddLocalization(Localization localization) { if (-1 == this.codepage) { this.codepage = localization.Codepage; } foreach (WixVariableRow wixVariableRow in localization.Variables) { WixVariableRow existingWixVariableRow = (WixVariableRow)this.variables[wixVariableRow.Id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { this.variables[wixVariableRow.Id] = wixVariableRow; } else if (!wixVariableRow.Overridable) { this.OnMessage(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } foreach (KeyValuePair <string, LocalizedControl> localizedControl in localization.LocalizedControls) { if (!this.localizedControls.ContainsKey(localizedControl.Key)) { this.localizedControls.Add(localizedControl.Key, localizedControl.Value); } } }
/// <summary> /// Parse a localization string into a WixVariableRow. /// </summary> /// <param name="node">Element to parse.</param> private static void ParseString(XElement node, IDictionary <string, WixVariableRow> variables, TableDefinitionCollection tableDefinitions) { string id = null; bool overridable = false; SourceLineNumber sourceLineNumbers = SourceLineNumber.CreateFromXObject(node); foreach (XAttribute attrib in node.Attributes()) { if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || Localizer.WxlNamespace == attrib.Name.Namespace) { switch (attrib.Name.LocalName) { case "Id": id = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib); break; case "Overridable": overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib); break; case "Localizable": ; // do nothing break; default: Messaging.Instance.OnMessage(WixErrors.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); break; } } else { Messaging.Instance.OnMessage(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); } } string value = Common.GetInnerText(node); if (null == id) { Messaging.Instance.OnMessage(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); } else if (0 == id.Length) { Messaging.Instance.OnMessage(WixErrors.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0)); } if (!Messaging.Instance.EncounteredError) { WixVariableRow wixVariableRow = new WixVariableRow(sourceLineNumbers, tableDefinitions["WixVariable"]); wixVariableRow.Id = id; wixVariableRow.Overridable = overridable; wixVariableRow.Value = value; Localizer.AddWixVariable(variables, wixVariableRow); } }
/// <summary> /// Add a variable. /// </summary> /// <param name="wixVariableRow">The WixVariableRow to add.</param> public void AddVariable(WixVariableRow wixVariableRow) { if (!this.wixVariables.Contains(wixVariableRow.Id)) { this.wixVariables.Add(wixVariableRow.Id, wixVariableRow.Value); } else if (!wixVariableRow.Overridable) // collision { Messaging.Instance.OnMessage(WixErrors.WixVariableCollision(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } }
/// <summary> /// Get a localized data value. /// </summary> /// <param name="id">The name of the localization variable.</param> /// <returns>The localized data value or null if it wasn't found.</returns> public string GetLocalizedValue(string id) { WixVariableRow wixVariableRow = (WixVariableRow)this.variables[id]; if (null != wixVariableRow) { return(wixVariableRow.Value); } else { return(null); } }
/// <summary> /// Add a variable. /// </summary> /// <param name="wixVariableRow">The WixVariableRow to add.</param> public void AddVariable(WixVariableRow wixVariableRow) { try { this.wixVariables.Add(wixVariableRow.Id, wixVariableRow.Value); } catch (ArgumentException) { if (!wixVariableRow.Overridable) // collision { Messaging.Instance.OnMessage(WixErrors.WixVariableCollision(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } }
/// <summary> /// Merge the information from another localization object into this one. /// </summary> /// <param name="localization">The localization object to be merged into this one.</param> public void Merge(Localization localization) { foreach (WixVariableRow wixVariableRow in localization.Variables) { WixVariableRow existingWixVariableRow = (WixVariableRow)variables[wixVariableRow.Id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { variables[wixVariableRow.Id] = wixVariableRow; } else if (!wixVariableRow.Overridable) { throw new WixException(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } } }
/// <summary> /// Adds a WixVariableRow to a dictionary while performing the expected override checks. /// </summary> /// <param name="variables">Dictionary of variable rows.</param> /// <param name="wixVariableRow">Row to add to the variables dictionary.</param> private static void AddWixVariable(IDictionary <string, WixVariableRow> variables, WixVariableRow wixVariableRow) { WixVariableRow existingWixVariableRow; if (!variables.TryGetValue(wixVariableRow.Id, out existingWixVariableRow) || (existingWixVariableRow.Overridable && !wixVariableRow.Overridable)) { variables[wixVariableRow.Id] = wixVariableRow; } else if (!wixVariableRow.Overridable) { Messaging.Instance.OnMessage(WixErrors.DuplicateLocalizationIdentifier(wixVariableRow.SourceLineNumbers, wixVariableRow.Id)); } }
/// <summary> /// Parse a localization string. /// </summary> /// <param name="node">Element to parse.</param> private void ParseString(XElement node) { string id = null; bool overridable = false; SourceLineNumber sourceLineNumbers = Preprocessor.GetSourceLineNumbers(node); foreach (XAttribute attrib in node.Attributes()) { if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || Localization.WxlNamespace == attrib.Name.Namespace) { switch (attrib.Name.LocalName) { case "Id": id = Common.GetAttributeIdentifierValue(sourceLineNumbers, attrib, null); break; case "Overridable": overridable = YesNoType.Yes == Common.GetAttributeYesNoValue(sourceLineNumbers, attrib, null); break; case "Localizable": ; // do nothing break; default: throw new WixException(WixErrors.UnexpectedAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); } } else { throw new WixException(WixErrors.UnsupportedExtensionAttribute(sourceLineNumbers, attrib.Parent.Name.ToString(), attrib.Name.ToString())); } } string value = Common.GetInnerText(node); if (null == id) { throw new WixException(WixErrors.ExpectedAttribute(sourceLineNumbers, "String", "Id")); } else if (0 == id.Length) { throw new WixException(WixErrors.IllegalIdentifier(sourceLineNumbers, "String", "Id", 0)); } WixVariableRow wixVariableRow = new WixVariableRow(sourceLineNumbers, this.tableDefinitions["WixVariable"]); wixVariableRow.Id = id; wixVariableRow.Overridable = overridable; wixVariableRow.Value = value; WixVariableRow existingWixVariableRow = (WixVariableRow)this.variables[id]; if (null == existingWixVariableRow || (existingWixVariableRow.Overridable && !overridable)) { this.variables.Add(id, wixVariableRow); } else if (!overridable) { throw new WixException(WixErrors.DuplicateLocalizationIdentifier(sourceLineNumbers, id)); } }
/// <summary> /// Creates a new row in the table. /// </summary> /// <param name="sourceLineNumbers">Original source lines for this row.</param> /// <param name="add">Specifies whether to only create the row or add it to the table automatically.</param> /// <returns>Row created in table.</returns> public Row CreateRow(SourceLineNumber sourceLineNumbers, bool add) { Row row; switch (this.Name) { case "BBControl": row = new BBControlRow(sourceLineNumbers, this); break; case "ChainMsiPackage": row = new ChainMsiPackageRow(sourceLineNumbers, this); break; case "Component": row = new ComponentRow(sourceLineNumbers, this); break; case "Control": row = new ControlRow(sourceLineNumbers, this); break; case "File": row = new FileRow(sourceLineNumbers, this); break; case "Media": row = new MediaRow(sourceLineNumbers, this); break; case "PayloadInfo": row = new PayloadInfoRow(sourceLineNumbers, this); break; case "Upgrade": row = new UpgradeRow(sourceLineNumbers, this); break; case "Variable": row = new VariableRow(sourceLineNumbers, this); break; case "WixAction": row = new WixActionRow(sourceLineNumbers, this); break; case "WixComplexReference": row = new WixComplexReferenceRow(sourceLineNumbers, this); break; case "WixFile": row = new WixFileRow(sourceLineNumbers, this); break; case "WixMedia": row = new WixMediaRow(sourceLineNumbers, this); break; case "WixMediaTemplate": row = new WixMediaTemplateRow(sourceLineNumbers, this); break; case "WixMerge": row = new WixMergeRow(sourceLineNumbers, this); break; case "WixProperty": row = new WixPropertyRow(sourceLineNumbers, this); break; case "WixBundle": row = new WixBundleRow(sourceLineNumbers, this); break; case "WixBundlePatchTargetCode": row = new WixBundlePatchTargetCodeRow(sourceLineNumbers, this); break; case "WixBundleUpdate": row = new WixBundleUpdateRow(sourceLineNumbers, this); break; case "WixUpdateRegistration": row = new WixUpdateRegistrationRow(sourceLineNumbers, this); break; case "WixSimpleReference": row = new WixSimpleReferenceRow(sourceLineNumbers, this); break; case "WixVariable": row = new WixVariableRow(sourceLineNumbers, this); break; default: row = new Row(sourceLineNumbers, this); break; } if (add) { this.rows.Add(row); } return(row); }