Files
DP44/enriched-partialglm/DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/Resources.md
2026-04-17 14:55:32 -04:00

5.0 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/Resources/TranslateExtension.cs
DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReport/Resources/StringResources.Designer.cs
2026-04-16T11:03:12.267125+00:00 zai-org/GLM-5-FP8 1 01cf0d845cbc5765

Documentation: DTS.Viewer.PSDReport.Resources

1. Purpose

This module provides localization infrastructure for the DTS.Viewer.PSDReport namespace. It consists of a strongly-typed resource accessor class (StringResources) generated from a .resx file, and a WPF XAML markup extension (TranslateExtension) that allows UI elements to bind directly to localized strings using a key. The module ensures that the report module can present user-facing text in different languages without hardcoding strings in the UI logic.

2. Public Interface

Class: TranslateExtension

Namespace: DTS.Viewer.PSDReport Inheritance: System.Windows.Markup.MarkupExtension

This class allows XAML bindings to retrieve localized strings declaratively.

  • Constructor: TranslateExtension(string key)
    • Initializes the extension with the resource key to be looked up.
  • Method: ProvideValue(IServiceProvider serviceProvider)
    • Return Type: object (attributed to return string)
    • Behavior: Looks up the provided _key via StringResources.ResourceManager. Returns the localized string if found. If the key is null or empty, it returns the constant "#stringnotfound#". If the lookup fails (returns null), it returns "#stringnotfound# " appended with the missing key name.

Class: StringResources

Namespace: DTS.Viewer.PSDReport.Resources Accessibility: internal

This is a strongly-typed, auto-generated resource class for looking up culture-specific strings.

  • Property: ResourceManager (static, System.Resources.ResourceManager)
    • Returns the cached ResourceManager instance for this assembly. It is lazily initialized upon first access.
  • Property: Culture (static, System.Globalization.CultureInfo)
    • Gets or sets the current UI culture used for resource lookups. This overrides the current thread's CurrentUICulture for resource lookups via this class.
  • Resource Accessors (static, string)
    • The following properties return localized strings corresponding to their keys:
      • DataHeader ("Data")
      • DataSelectionHeader ("Data selection")
      • GraphsDefaultTitle ("Graphs ")
      • ModificationsHeader ("Modify")
      • PSDHeader ("PSD")
      • PSDResultsHeader ("Results")
      • PSDSettingsHeader ("PSD Settings")
      • SettingsTitle ("Settings")
      • TestsDefaultTitle ("Tests ")

3. Invariants

  • Fallback Behavior: TranslateExtension.ProvideValue will never return null. It guarantees a string return, defaulting to the literal "#stringnotfound#" (with optional key suffix) for missing or invalid keys.
  • Auto-generation: StringResources is auto-generated. Manual modifications to StringResources.Designer.cs will be lost upon regeneration. The source of truth is the corresponding .resx file.
  • Internal Visibility: StringResources is marked internal, restricting access to within the DTS.Viewer.PSDReport assembly.
  • Thread Safety: The ResourceManager property in StringResources uses a standard lazy initialization check (object.ReferenceEquals(resourceMan, null)). While standard for generated code, it is not strictly thread-safe in a race condition scenario (though usually harmless for resource managers).

4. Dependencies

  • Internal Dependencies:
    • TranslateExtension depends on StringResources (specifically StringResources.ResourceManager) to perform lookups.
  • External Framework Dependencies:
    • System.Windows.Markup: Required for MarkupExtension and MarkupExtensionReturnTypeAttribute (implies a dependency on WPF/WindowsBase).
    • System.Resources: Required for ResourceManager.
    • System.Globalization: Required for CultureInfo.

5. Gotchas

  • Dynamic vs. Strongly-typed Access: TranslateExtension uses ResourceManager.GetString (dynamic lookup by string) rather than the strongly-typed properties (e.g., StringResources.DataHeader). This means typos in XAML keys will not cause compile-time errors but will result in the "#stringnotfound#" fallback string appearing in the UI at runtime.
  • Missing Source File: The actual translation values (key-value pairs) reside in a .resx file (e.g., StringResources.resx) which is not included in the provided source. The default English values shown in the XML comments (e.g., "Data", "Graphs ") are the only insight into the actual content.
  • Trailing Spaces: The default values for GraphsDefaultTitle ("Graphs ") and TestsDefaultTitle ("Tests ") appear to contain trailing spaces in the auto-generated comments. It is unclear if this is intentional or a data artifact without seeing the .resx file.