--- source_files: - DataPRO/Modules/Menu/HamburgerMenu/Resources/TranslateExtension.cs - DataPRO/Modules/Menu/HamburgerMenu/Resources/StringResources.Designer.cs generated_at: "2026-04-16T04:48:26.109962+00:00" model: "Qwen/Qwen3-Coder-Next-FP8" schema_version: 1 sha256: "846fd5844632234a" --- # Resources ## Documentation: `TranslateExtension` Class ### 1. Purpose The `TranslateExtension` class is a WPF `MarkupExtension` that enables declarative localization of UI strings in XAML. It resolves a given resource key at runtime by querying the `StringResources` strongly-typed resource class and returns the corresponding localized string. If the key is missing or the lookup fails, it returns a placeholder string to make missing translations visually obvious during development. This module exists to support multi-language UIs in the HamburgerMenu module without requiring code-behind for simple string bindings. ### 2. Public Interface - **`TranslateExtension(string key)`** Constructor. Accepts a non-null resource key string used to look up a localized value. - *Parameter*: `key` (`string`) – The resource key (e.g., `"Table_NA"`). Must match a key in the `StringResources.resx` file. - **`override object ProvideValue(IServiceProvider serviceProvider)`** Implements `MarkupExtension.ProvideValue`. Performs the resource lookup and returns the localized string or a placeholder. - *Behavior*: - If `_key` is `null` or empty → returns `"#stringnotfound#"`. - Else → attempts `StringResources.ResourceManager.GetString(_key)`. - If found → returns the string. - If not found (`null`) → returns `"#stringnotfound# " + _key` (e.g., `"#stringnotfound# MyKey"`). ### 3. Invariants - `_key` is immutable after construction (stored in a `readonly` field). - The returned value is always a `string` (per `[MarkupExtensionReturnType(typeof(string))]`). - Missing keys are *never* silently ignored; they always produce a visible placeholder string. - Resource lookup uses the current UI culture (`CultureInfo`) set on `StringResources.Culture`. ### 4. Dependencies - **Depends on**: - `System.Windows.Markup.MarkupExtension` (WPF framework) - `HamburgerMenu.Resources.StringResources` (strongly-typed resource class) - `System.Resources.ResourceManager` (via `StringResources.ResourceManager`) - **Used by**: - XAML files in the `HamburgerMenu` module (e.g., ``). - No other C# code appears to depend on this class directly (it is XAML-only). ### 5. Gotchas - **Hardcoded placeholder**: The `"#stringnotfound#"` prefix is hardcoded; changing it requires modifying this class. - **No fallback chain**: If a key is missing, no secondary key or default value is attempted—only the placeholder is returned. - **No compile-time key validation**: Typos in XAML (e.g., `{local:Translate Tabl_NA}`) will only surface at runtime as `"#stringnotfound# Tabl_NA"`. - **Culture dependency**: Localization behavior relies on `StringResources.Culture` being set appropriately (e.g., via `Thread.CurrentThread.CurrentUICulture`). If unset, the default culture is used. - **Auto-generated resource class**: `StringResources.Designer.cs` is auto-generated; edits will be overwritten. Resource keys must be managed via `.resx` files. - **No async/safe fallback**: `GetString()` is synchronous and may throw if the underlying resource stream is corrupted (though this is rare). None identified beyond the above.