/// ------------------------------------------------------------------------------------ internal XLiffTransUnitUpdater(XLiffLocalizedStringCache cache) { _stringCache = cache; _defaultLang = LocalizationManager.kDefaultLang; var replacement = _stringCache.GetDocument(_defaultLang).File .HardLineBreakReplacement; if (replacement != null) { _literalNewline = replacement; } }
/// ------------------------------------------------------------------------------------ /// <summary> /// Updates the localized info. in the cache with the info. from the specified /// LocalizedObjectInfo. /// </summary> /// ------------------------------------------------------------------------------------ internal bool Update(LocalizingInfo locInfo) { _updated = false; // Can't do anything without a language id. if (string.IsNullOrEmpty(locInfo.LangId)) { return(_updated); } var xliffSource = _stringCache.GetDocument(_defaultLang); Debug.Assert(xliffSource != null); XLiffDocument xliffTarget; if (!_stringCache.TryGetDocument(locInfo.LangId, out xliffTarget)) { xliffTarget = new XLiffDocument(); xliffTarget.File.AmpersandReplacement = xliffSource.File.AmpersandReplacement; xliffTarget.File.DataType = xliffSource.File.DataType; xliffTarget.File.HardLineBreakReplacement = xliffSource.File.HardLineBreakReplacement; xliffTarget.File.Original = xliffSource.File.Original; xliffTarget.File.ProductVersion = xliffSource.File.ProductVersion; xliffTarget.File.SourceLang = xliffSource.File.SourceLang; xliffTarget.File.TargetLang = locInfo.LangId; xliffTarget.IsDirty = true; _updated = true; _stringCache.AddDocument(locInfo.LangId, xliffTarget); } var tuSourceText = xliffSource.GetTransUnitForId(locInfo.Id); var tuSourceToolTip = xliffSource.GetTransUnitForId(locInfo.Id + kToolTipSuffix); var tuSourceShortcutKeys = xliffSource.GetTransUnitForId(locInfo.Id + kShortcutSuffix); if (locInfo.Priority == LocalizationPriority.NotLocalizable) { _updated = (tuSourceText != null || tuSourceToolTip != null || tuSourceShortcutKeys != null); xliffSource.RemoveTransUnit(tuSourceText); xliffSource.RemoveTransUnit(tuSourceToolTip); xliffSource.RemoveTransUnit(tuSourceShortcutKeys); if (_defaultLang != locInfo.LangId) { xliffTarget.RemoveTransUnit(tuSourceText); xliffTarget.RemoveTransUnit(tuSourceToolTip); xliffTarget.RemoveTransUnit(tuSourceShortcutKeys); } return(_updated); } // Save the shortcut keys var shortcutId = locInfo.Id + kShortcutSuffix; if ((locInfo.UpdateFields & UpdateFields.ShortcutKeys) == UpdateFields.ShortcutKeys) { UpdateValueAndComment(xliffTarget, tuSourceShortcutKeys, locInfo.ShortcutKeys, locInfo, shortcutId); } // Save the tooltips var tooltipId = locInfo.Id + kToolTipSuffix; if ((locInfo.UpdateFields & UpdateFields.ToolTip) == UpdateFields.ToolTip) { UpdateValueAndComment(xliffTarget, tuSourceToolTip, locInfo.ToolTipText, locInfo, tooltipId); } // Save the text if ((locInfo.UpdateFields & UpdateFields.Text) == UpdateFields.Text) { var text = locInfo.Text ?? string.Empty; // first because Environment.Newline might be one part of it. We include this explicitly // in case some Windows data somehow finds its way to Linux. text = text.Replace("\r\n", _literalNewline); text = text.Replace(Environment.NewLine, _literalNewline); text = text.Replace(_literalNewline, "@#$"); text = text.Replace(kOSRealNewline, _literalNewline); text = text.Replace("@#$", _literalNewline); UpdateValueAndComment(xliffTarget, tuSourceText, text, locInfo, locInfo.Id); } if (_updated) { xliffTarget.IsDirty = true; } return(_updated); }