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

51 lines
3.4 KiB
Markdown
Raw Permalink 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/Hardware/AddEditHardware/Resources/TranslateExtension.cs
- DataPRO/Modules/Hardware/AddEditHardware/Resources/StringResources.Designer.cs
generated_at: "2026-04-16T04:36:34.790176+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "df6887e304a35dc7"
---
# Resources
## Documentation: `TranslateExtension` Markup Extension
### 1. Purpose
This module provides a WPF `MarkupExtension` (`TranslateExtension`) that enables declarative localization of UI strings in XAML. It allows UI elements (e.g., `TextBlock.Text`, `Button.Content`) to bind to localized string resources defined in `StringResources` by specifying a resource key. Its role is to abstract away manual resource lookup and support runtime culture switching in the `AddEditHardware` modules UI.
### 2. Public Interface
- **`TranslateExtension(string key)`**
Constructor. Accepts a string `key` corresponding to a resource name in `StringResources`. Stores the key for later lookup.
- **`object ProvideValue(IServiceProvider serviceProvider)`**
Overrides `MarkupExtension.ProvideValue`. Performs resource lookup at XAML load time:
- Returns `"#stringnotfound#"` if `_key` is `null` or empty.
- Returns the localized string from `StringResources.ResourceManager.GetString(_key)` if found.
- Returns `"#stringnotfound# <key>"` (e.g., `"#stringnotfound# MyKey"`) if the key is non-empty but no matching resource exists.
### 3. Invariants
- `_key` is immutable after construction (no setter or mutation).
- The extension **always returns a `string`** (per `[MarkupExtensionReturnType(typeof(string))]`).
- Lookup is **case-sensitive** (relies on `ResourceManager.GetString(string)` behavior).
- If a resource key is missing, the fallback string explicitly includes the original key for debugging visibility.
### 4. Dependencies
- **Depends on**:
- `System.Windows.Markup` (for `MarkupExtension` base class).
- `AddEditHardware.Resources.StringResources` (strongly-typed resource class generated from `.resx`).
- `System.Resources.ResourceManager` (used internally via `StringResources.ResourceManager`).
- **Used by**:
- XAML files in the `AddEditHardware` module (e.g., `AddEditHardwareView.xaml`) to localize UI elements.
- No direct runtime dependencies beyond WPF framework and the `StringResources` assembly.
### 5. Gotchas
- **Static resource resolution**: `ProvideValue` is called **once at XAML load time**, not at runtime. Changing `StringResources.Culture` *after* XAML is parsed will **not** update already-bound UI elements.
- **Fallback format**: Missing keys yield `"#stringnotfound# <key>"`, which may appear in UI if keys are misspelled or missing from `.resx`. This is intentional for debugging but may confuse end users.
- **No null-safety for `serviceProvider`**: The implementation does not validate `serviceProvider`, though WPF typically provides a valid instance.
- **Hardcoded fallback**: The `"#stringnotfound#"` prefix is hardcoded and not configurable.
- **No async or caching optimization**: Each usage triggers a `ResourceManager.GetString()` call; no caching is applied within `TranslateExtension` (though `ResourceManager` itself caches resources internally).
- **Auto-generated resource class**: `StringResources` is auto-generated; manual edits will be overwritten. Resource keys must match exactly (case-sensitive) with entries in the `.resx` file.
None identified beyond the above.