Files
DP44/enriched-qwen3-coder-next/DataPRO/Modules/RegionOfInterest/RegionOfInterestChannels/Resources.md
2026-04-17 14:55:32 -04:00

56 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
source_files:
- DataPRO/Modules/RegionOfInterest/RegionOfInterestChannels/Resources/TranslateExtension.cs
- DataPRO/Modules/RegionOfInterest/RegionOfInterestChannels/Resources/StringResources.Designer.cs
generated_at: "2026-04-16T04:33:56.334065+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "1d36778ed3ef747c"
---
# Resources
## Documentation: `TranslateExtension` Markup Extension
### 1. Purpose
This module provides a WPF `MarkupExtension` (`TranslateExtension`) to enable declarative, localized string resolution in XAML. It allows UI elements (e.g., `TextBlock.Text`, `Button.Content`) to bind to localized strings defined in `StringResources` by specifying a resource key. This supports internationalization of the Region of Interest (ROI) channels UI module by decoupling UI text from code and enabling culture-specific translations.
### 2. Public Interface
- **`TranslateExtension` class**
- **Inherits**: `System.Windows.Markup.MarkupExtension`
- **Constructor**: `public TranslateExtension(string key)`
- Initializes the extension with a resource key (`_key`).
- Throws no exceptions; invalid keys are handled at runtime (see *Invariants* and *Gotchas*).
- **Method**: `public override object ProvideValue(IServiceProvider serviceProvider)`
- Returns the localized string corresponding to `_key` from `StringResources.ResourceManager`.
- If `_key` is null/empty → returns `"#stringnotfound#"`.
- If `_key` is non-empty but no matching resource exists → returns `"#stringnotfound# <key>"`.
- Otherwise → returns the resolved string (e.g., `"Channel Name"` for key `"ChannelName"`).
### 3. Invariants
- `_key` is immutable after construction (no setter, no modification).
- The returned value is always a `string` (per `[MarkupExtensionReturnType(typeof(string))]`).
- **Resource lookup behavior**:
- `string.IsNullOrEmpty(_key)` → guaranteed to return `"#stringnotfound#"`.
- Non-empty `_key` with no matching resource → guaranteed to return `"#stringnotfound# " + _key`.
- `StringResources.ResourceManager.GetString(...)` is used directly (no caching of individual lookups beyond .NETs internal `ResourceManager` caching).
### 4. Dependencies
- **Internal dependencies**:
- `RegionOfInterestChannels.Resources.StringResources` (strongly-typed resource class)
- `System.Windows.Markup.MarkupExtension` (WPF framework)
- `System.Resources.ResourceManager` (for runtime resource lookup)
- **External dependencies**:
- WPF runtime (for `MarkupExtension` and XAML integration).
- `StringResources.resx` (source file for localized strings; not included, but implied by `StringResources.Designer.cs`).
- **Used by**: XAML files in the `RegionOfInterestChannels` module (e.g., `TranslateExtension` is likely used as `{local:Translate SomeKey}`).
### 5. Gotchas
- **No fallback to default culture**: If `StringResources.Culture` is set, lookups respect it; otherwise, the threads `CurrentUICulture` is used. No explicit culture fallback logic is implemented.
- **Error strings are visible to users**: `"#stringnotfound#"` and `"#stringnotfound# <key>"` are returned verbatim—these are *not* silent failures and may appear in the UI if keys are misspelled or missing.
- **No validation of key existence at compile time**: Keys are string literals; typos (e.g., `"ChannelName"` vs `"ChannelName "`) cause runtime errors.
- **Thread-safety**: Relies on `StringResources.ResourceManager`s thread-safety (assumed per .NET docs), but no explicit synchronization is present.
- **No support for parameterized strings**: While `StringResources` contains format strings (e.g., `"Channel \"{0}\" has not been assigned..."`), `TranslateExtension` does *not* support passing arguments (e.g., no `string.Format`-style interpolation). Users must handle formatting separately.
- **Auto-generated resource class**: `StringResources.Designer.cs` is auto-generated; manual edits are overwritten. Resource keys must match exactly with `.resx` entries.
None identified beyond the above.