Files
2026-04-17 14:55:32 -04:00

6.8 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Resources/TranslateExtension.cs
DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/Resources/StringResources.Designer.cs
2026-04-16T11:00:37.156668+00:00 zai-org/GLM-5-FP8 1 5a446a4aa0389800

Documentation: DTS.Viewer.PSDReportSettings.Resources

1. Purpose

This module provides localization/translation infrastructure for the PSD (Power Spectral Density) Report Settings UI within the DTS Viewer application. It consists of a WPF XAML markup extension (TranslateExtension) that enables declarative resource binding in XAML, and a strongly-typed auto-generated resource accessor class (StringResources) containing localized strings for filter configurations, window settings, envelope display options, and export functionality.


2. Public Interface

TranslateExtension (class)

Namespace: DTS.Viewer.PSDReportSettings
Inheritance: MarkupExtension
Attribute: [MarkupExtensionReturnType(typeof(string))]

A WPF markup extension that resolves localization keys to localized strings at XAML parse time.

Member Signature Description
Constructor TranslateExtension(string key) Initializes the extension with the resource key to look up. The key is stored in a readonly field _key.
Method object ProvideValue(IServiceProvider serviceProvider) Returns the localized string for _key from StringResources.ResourceManager. Returns #stringnotfound# if _key is null or empty. Returns #stringnotfound# <key> if the key does not exist in the resource file.

StringResources (class)

Namespace: DTS.Viewer.PSDReportSettings.Resources
Access: internal
Attribute: [GeneratedCode], [DebuggerNonUserCode], [CompilerGenerated]

An auto-generated strongly-typed resource accessor class. Not publicly accessible outside the assembly.

Member Signature Description
Property static ResourceManager ResourceManager Lazily-initialized cached ResourceManager instance for the DTS.Viewer.PSDReportSettings.Resources.StringResources resource bundle.
Property static CultureInfo Culture Gets or sets the current UI culture for resource lookups. Overrides Thread.CurrentUICulture for this resource class.

Localized String Properties (all internal static string):

Property Name Default Value (English) Context
EnvelopeHeader "Envelope" UI header
ExportPSDHeader "Export" UI header
ExportPSDtoCSV "Export PSD to CSV" Export action
ExportPSDtoPDF "Export PSD to PDF" Export action
FilterCenterFrequency "Center frequency" Filter setting label
FilterOrder "Filter order" Filter setting label
FilterSettingsHeader "Filters" UI header
FilterType "Filter type" Filter setting label
FilterType_Bessel "Bessel" Filter type enum value
FilterType_Butterworth "Butterworth" Filter type enum value
FilterType_LinkwitzRiley "Linkwitz-Riley" Filter type enum value
HighPassFilter "High pass filter" Filter type
Hz "Hz" Unit label
LowPassFilter "Low pass filter" Filter type
PSDSettingsHeader "PSD settings" UI header
ShowEnvelope "Show Envelope" Checkbox/toggle label
WindowAveragingType "Averaging type" Window setting label
WindowOverlappingPercent "Overlapping %" Window setting label
WindowSettingsHeader "Window" UI header
WindowType "Window type" Window setting label
WindowWidth "Window width" Window setting label

3. Invariants

  1. Key immutability: The _key field in TranslateExtension is readonly and set only at construction time.

  2. Fallback behavior: ProvideValue will never return null. It returns the constant "#stringnotfound#" for null/empty keys, or "#stringnotfound# <key>" for missing resource entries.

  3. ResourceManager singleton: The ResourceManager property uses lazy initialization with a null-check pattern; once initialized, the same instance is returned for all subsequent calls.

  4. Thread-safety of ResourceManager: The lazy initialization in StringResources.ResourceManager is not thread-safe (uses simple null check without locking). Concurrent access during first initialization could potentially create multiple ResourceManager instances.

  5. Internal visibility: StringResources is marked internal, restricting access to within the DTS.Viewer.PSDReportSettings assembly.


4. Dependencies

This module depends on:

  • System (core types)
  • System.Windows.Markup (MarkupExtension, MarkupExtensionReturnTypeAttribute)
  • System.Resources (ResourceManager)
  • System.Globalization (CultureInfo)
  • System.CodeDom.Compiler (GeneratedCodeAttribute)
  • System.Diagnostics (DebuggerNonUserCodeAttribute)
  • System.Runtime.CompilerServices (CompilerGeneratedAttribute)

External resource dependency:

  • A .resx file (not shown in source) named StringResources.resx must exist in the DTS.Viewer.PSDReportSettings.Resources namespace to provide the actual localized values.

What depends on this module:

  • Unclear from source alone. The TranslateExtension is designed for XAML consumption within the PSD Report Settings UI, but the specific XAML files or controls using it are not present in the provided source.

5. Gotchas

  1. Auto-generated code warning: StringResources.Designer.cs is tool-generated. Manual edits will be overwritten when the resource file is regenerated. The source explicitly warns: "Changes to this file may cause incorrect behavior and will be lost if the code is regenerated."

  2. Missing key visibility: Missing localization keys result in visible error strings (#stringnotfound#) appearing in the UI rather than silent failures or exceptions. This is intentional for debugging but could leak into production if resource files are incomplete.

  3. Thread-safety gap: The ResourceManager property getter performs a non-atomic check-then-assign pattern (if (object.ReferenceEquals(resourceMan, null))). Under concurrent access, multiple ResourceManager instances could be created, though the functional impact is likely minimal.

  4. Culture must be set explicitly: The StringResources.Culture property allows overriding the current thread's UI culture, but it must be set manually. If never set, resourceCulture remains null and ResourceManager.GetString uses Thread.CurrentUICulture.

  5. No design-time validation: The TranslateExtension constructor accepts any string key without validation. Typos in XAML will only manifest as #stringnotfound# at runtime.