localizing-wpf-with-baml

WPF BAML Localization

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "localizing-wpf-with-baml" with this command: npx skills add christian289/dotnet-with-claudecode/christian289-dotnet-with-claudecode-localizing-wpf-with-baml

WPF BAML Localization

Localize WPF applications using x:Uid attributes and LocBaml tool for satellite assembly generation.

  1. BAML Localization Overview

BAML Localization Workflow ├── 1. Add x:Uid to XAML elements ├── 2. Set UICulture in project ├── 3. Build to generate default resources ├── 4. Extract with LocBaml /parse ├── 5. Translate CSV files └── 6. Generate satellite assemblies with LocBaml /generate

When to use BAML:

  • Enterprise applications with professional translation workflow

  • Need to localize without recompiling

  • Complex UI with many localizable properties

  1. Adding x:Uid Attributes

<Window x:Class="MyApp.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Uid="MainWindow" Title="My Application"> <Grid x:Uid="MainGrid"> <StackPanel x:Uid="ContentPanel"> <TextBlock x:Uid="TitleText" Text="Welcome to My Application"/> <TextBlock x:Uid="DescriptionText" Text="Please select an option below."/> <Button x:Uid="SaveButton" Content="Save"/> <Button x:Uid="CancelButton" Content="Cancel"/> <Button x:Uid="HelpButton" Content="Help" ToolTip="Click for help"/> </StackPanel> </Grid> </Window>

x:Uid naming conventions:

  • Use descriptive names: SaveButton , TitleText

  • Unique within the XAML file

  • Applied to elements with localizable properties

  1. Project Configuration

3.1 Set UICulture

<!-- .csproj --> <PropertyGroup> <UICulture>en-US</UICulture> </PropertyGroup>

3.2 Build Output Structure

bin/Release/ ├── MyApp.exe ├── MyApp.resources.dll └── ko-KR/ └── MyApp.resources.dll ← Korean satellite assembly

  1. LocBaml Tool Usage

4.1 Extract Resources

Parse and extract to CSV

LocBaml /parse MyApp.resources.dll /out:en-US.csv

CSV output format:

MyApp.g.en-US.resources:mainwindow.baml,MainWindow:Window.Title,Title,True,True,None,My Application MyApp.g.en-US.resources:mainwindow.baml,TitleText:TextBlock.Text,Text,True,True,None,Welcome to My Application MyApp.g.en-US.resources:mainwindow.baml,SaveButton:Button.Content,Content,True,True,None,Save

4.2 Translate CSV

Create ko-KR.csv with translations:

MyApp.g.en-US.resources:mainwindow.baml,MainWindow:Window.Title,Title,True,True,None,내 애플리케이션 MyApp.g.en-US.resources:mainwindow.baml,TitleText:TextBlock.Text,Text,True,True,None,내 애플리케이션에 오신 것을 환영합니다 MyApp.g.en-US.resources:mainwindow.baml,SaveButton:Button.Content,Content,True,True,None,저장

4.3 Generate Satellite Assembly

Create Korean satellite assembly

LocBaml /generate MyApp.resources.dll /trans:ko-KR.csv /cul:ko-KR /out:.\ko-KR

Create Japanese satellite assembly

LocBaml /generate MyApp.resources.dll /trans:ja-JP.csv /cul:ja-JP /out:.\ja-JP

  1. Automation Script

build-localization.ps1

param( [string]$ProjectPath = ".", [string[]]$Cultures = @("ko-KR", "ja-JP", "de-DE") )

$OutputPath = "$ProjectPath\bin\Release" $ResourceDll = "$OutputPath\MyApp.resources.dll"

Extract base resources

LocBaml /parse $ResourceDll /out:"$OutputPath\en-US.csv"

Generate satellite assemblies for each culture

foreach ($culture in $Cultures) { $csvPath = "$ProjectPath\Localization$culture.csv" $outPath = "$OutputPath$culture"

if (Test-Path $csvPath) {
    New-Item -ItemType Directory -Force -Path $outPath | Out-Null
    LocBaml /generate $ResourceDll /trans:$csvPath /cul:$culture /out:$outPath
    Write-Host "Generated: $culture"
}

}

  1. Runtime Culture Selection

// App.xaml.cs protected override void OnStartup(StartupEventArgs e) { // Set culture before any UI is created var culture = new CultureInfo("ko-KR"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture = culture;

base.OnStartup(e);

}

  1. Localizable Properties

Element Localizable Properties

Window Title

TextBlock Text

Button Content, ToolTip

Label Content

MenuItem Header

ToolTip Content

  1. References
  • WPF Globalization - Microsoft Docs

  • LocBaml Tool - Microsoft Docs

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

converting-html-css-to-wpf-xaml

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

managing-styles-resourcedictionary

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

using-xaml-property-element-syntax

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

designing-avalonia-customcontrol-architecture

No summary provided by upstream source.

Repository SourceNeeds Review