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

83 lines
5.5 KiB
Markdown

---
source_files:
- DTS Viewer/DTS.Viewer.Modules/DTS.Viewer.TestModification/Resources/TranslateExtension.cs
- DTS Viewer/DTS.Viewer.Modules/DTS.Viewer.TestModification/Resources/StringResources.Designer.cs
generated_at: "2026-04-16T11:08:29.234915+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "46010437bced3eec"
---
# Documentation: DTS.Viewer.TestModification.Resources
## 1. Purpose
This module provides localization support for the `DTS.Viewer.TestModification` namespace. It consists of a strongly-typed resource wrapper class, `StringResources`, which provides compile-time access to localized strings (likely sourced from a `.resx` file), and a XAML markup extension, `TranslateExtension`, that allows WPF UI elements to bind to these localized strings declaratively.
## 2. Public Interface
### Class: `TranslateExtension`
**Namespace:** `DTS.Viewer.TestModification`
**Inheritance:** `System.Windows.Markup.MarkupExtension`
This class allows XAML bindings to retrieve localized strings using a resource key.
* **Constructor**
* `public TranslateExtension(string key)`: Initializes the extension with the specific resource key to look up.
* **Method**
* `public override object ProvideValue(IServiceProvider serviceProvider)`: Returns the localized string associated with the `_key`. If the key is null, empty, or not found in the resource manager, it returns an error string constant.
### Class: `StringResources`
**Namespace:** `DTS.Viewer.TestModification.Resources`
**Accessibility:** `internal`
A strongly-typed resource class auto-generated by Visual Studio. It exposes localized strings as static properties.
* **Properties**
* `internal static global::System.Resources.ResourceManager ResourceManager`: Returns the cached `ResourceManager` instance responsible for retrieving resources.
* `internal static global::System.Globalization.CultureInfo Culture`: Gets or sets the current `CultureInfo` used for resource lookups.
* **Resource String Properties (Static)**
* `string CalDate`: "Cal date"
* `string DataFlag`: "Data Flag:"
* `string Description`: "Description:"
* `string EUMultiplier`: "EU Multiplier:"
* `string EUOffset`: "EU Offset:"
* `string FailedToModifySensitivity`: "Failed to modify sensitivity: "
* `string Filter`: "Filter:"
* `string LineFit`: "Line Fit:"
* `string ModifyDate`: "Modify date"
* `string NonLinear`: "Non-linear"
* `string PleaseLockHeader`: "To enable, please lock a single channel."
* `string Preview`: "Preview"
* `string ProportionalToExcitation`: "Proportional to excitation"
* `string Sensitivity`: "Sensitivity:"
* `string SensorCalibration`: "Sensor calibration (most recent in db)"
* `string ShiftT0ms`: "Shift T₀ (ms):"
* `string T0MustBeInDataset`: "Modification can not be made, T0 must be in the dataset."
* `string T1ms`: "T₁ (ms):"
* `string T2ms`: "T₂ (ms):"
* `string Undo`: "Cancel"
* `string UndoAll`: "Restore All"
* `string UndoAllPrompt`: "This will revert your saved test modifications to the backup on file. Continue?"
* `string UndoPrompt`: "This will undo any change(s) to this channel made before saving. Continue?"
* `string UpdateDatabase`: "Update database"
* `string WriteFiles`: "Write"
* `string WriteFilesPrompt`: "Are you sure you want to write these changes to disk?"
## 3. Invariants
* **Non-Null Return:** `TranslateExtension.ProvideValue` will never return `null`. It guarantees a string return, either the localized value or a specific error identifier.
* **Error Identifier:** If a resource key is not found, the return value must contain the constant `#stringnotfound#`. If the key is null or empty, it returns exactly `#stringnotfound#`. If the key is valid but missing from resources, it returns `#stringnotfound#` followed by a space and the missing key.
* **Auto-generation:** `StringResources` is marked with `GeneratedCodeAttribute`. Its members are strictly derived from the underlying resource source (e.g., `.resx`). Manual modifications to this file will be lost upon regeneration.
## 4. Dependencies
* **Internal Dependencies:**
* `TranslateExtension` depends on `StringResources` to perform the actual string lookup via `StringResources.ResourceManager`.
* **External Dependencies:**
* `System.Windows.Markup`: Required for `MarkupExtension` and `MarkupExtensionReturnTypeAttribute` (WPF specific).
* `System.Resources`: Required for `ResourceManager`.
* `System.Globalization`: Required for `CultureInfo`.
## 5. Gotchas
* **Auto-Generated File:** `StringResources.Designer.cs` is auto-generated. Developers must edit the corresponding `.resx` file (not present in the provided source) to add or modify strings; editing this `.cs` file directly is futile as changes will be overwritten.
* **Internal Visibility:** The `StringResources` class is `internal`. It cannot be accessed from outside the `DTS.Viewer.TestModification` assembly.
* **Silent Failures in UI:** `TranslateExtension` does not throw exceptions for missing keys. Instead, it returns strings like `#stringnotfound# MissingKey`. This behavior aids in debugging missing translations visually in the UI but requires the developer to inspect the string content rather than catching exceptions.
* **Static Culture:** The `StringResources.Culture` property is static. Changing it will affect all subsequent resource lookups within that assembly context, which implies the application is responsible for managing the UI culture lifecycle globally.