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

3.6 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
Common/DTS.Common/Strings/TranslateExtension.cs
2026-04-16T02:52:05.025997+00:00 Qwen/Qwen3-Coder-Next-FP8 1 73358136e74291bd

Strings

1. Purpose

TranslateExtension is a WPF MarkupExtension that enables declarative string localization in XAML by resolving resource keys to localized strings at runtime. It acts as a bridge between XAML markup and the applications resource management system (Strings.ResourceManager), allowing UI elements to bind to localized text without requiring code-behind or view model properties. Its role is to simplify internationalization by enabling direct use of translation keys in XAML attributes (e.g., Text="{local:Translate MyButtonLabel}").

2. Public Interface

  • TranslateExtension(string key)
    Constructor. Stores the resource key to be resolved. Throws no exceptions for null/empty keys—these are handled at runtime.
  • ProvideValue(IServiceProvider serviceProvider) (overrides MarkupExtension.ProvideValue)
    Resolves the stored _key to a localized string using Strings.ResourceManager.GetString(_key). Returns the localized string if found; otherwise, returns "#stringnotfound#" (if _key is null/empty) or "#stringnotfound# " + _key (if _key is non-empty but not found).

3. Invariants

  • _key is immutable after construction (stored in a readonly field).
  • The extension always returns a string (per [MarkupExtensionReturnType(typeof(string))]).
  • If _key is null or empty, the return value is exactly "#stringnotfound#".
  • If _key is non-empty but Strings.ResourceManager.GetString(_key) returns null, the return value is "#stringnotfound# " + _key (note the trailing space).
  • No validation is performed on _key beyond null/empty checks—invalid keys (e.g., containing spaces, special characters) are passed directly to ResourceManager.GetString.

4. Dependencies

  • Depends on:
    • System.Windows.Markup.MarkupExtension (base class)
    • System (for string.IsNullOrEmpty)
    • DTS.Common.Strings.Strings.ResourceManager (assumed to be a static ResourceManager instance; not imported in this file but referenced in source).
  • Used by:
    • XAML parsers (e.g., XamlReader, design-time/runtime XAML compilation) when encountering {local:Translate ...} markup extensions.
    • UI components that consume localized strings via XAML (e.g., TextBlock.Text, Button.Content).

5. Gotchas

  • No fallback for missing keys: The extension does not throw, log, or alert on missing keys—only returns a placeholder string. This may silently break UI text if keys are misspelled or resources are missing.
  • Trailing space in error message: The placeholder for missing keys includes a trailing space (" #key"), which may cause unintended whitespace in UI if not handled.
  • No culture support exposed: Uses ResourceManager.GetString(string) without specifying a CultureInfo, relying on the default behavior (typically the current UI culture). No mechanism to override culture per extension call.
  • No caching: Each ProvideValue call re-invokes ResourceManager.GetString, which may be inefficient if the same key is resolved frequently (though ResourceManager itself caches internally).
  • No null-safety for Strings.ResourceManager: If Strings.ResourceManager is null at runtime (e.g., due to initialization order), a NullReferenceException will occur.
  • None identified from source alone for additional edge cases beyond the above.