Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
davidortinau avatar

Maui Localization

  • 34 installs
  • 163 repo stars
  • Updated July 6, 2026
  • davidortinau/maui-skills

Localizes .NET MAUI apps with multi-language support via .resx files, culture resolution, runtime switching, and RTL layout.

About

Guides localizing .NET MAUI apps with .resx resource files, culture resolution and runtime switching, RTL layout and platform language declarations. A developer uses it when adding multi-language support to a MAUI app.

  • Multi-language support via .resx files with runtime switching
  • RTL layout and platform language declarations

Maui Localization by the numbers

  • 34 all-time installs (skills.sh)
  • Ranked #650 of 1,039 Mobile Development skills by installs in the Skillselion catalog
  • Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/davidortinau/maui-skills --skill maui-localization

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs34
repo stars163
Last updatedJuly 6, 2026
Repositorydavidortinau/maui-skills

What it does

Localizes .NET MAUI apps with multi-language support via .resx files, culture resolution, runtime switching, and RTL layout.

Files

SKILL.mdMarkdownGitHub ↗

.NET MAUI Localization

Common gotchas

IssueFix
ResourceManager returns null for default cultureSet <NeutralLanguage>en-US</NeutralLanguage> in .csproj
iOS ignores culture overridesCFBundleLocalizations missing from Info.plist
Windows doesn't show correct language<Resource Language="..." /> missing from Package.appxmanifest
x:Static bindings don't update on language switchx:Static is one-time — use binding approach with INotifyPropertyChanged
.Designer.cs not regenerating in VS CodeAdd <CoreCompileDependsOn>PrepareResources;$(CoreCompileDependsOn)</CoreCompileDependsOn> and run dotnet build

⚠️ NeutralLanguage is mandatory

<!-- ✅ Always set in .csproj -->
<PropertyGroup>
  <NeutralLanguage>en-US</NeutralLanguage>
</PropertyGroup>

<!-- ❌ Missing this causes ResourceManager to return null at runtime -->

Platform declarations — don't forget these

iOS / Mac Catalyst

⚠️ Without this, iOS won't offer your app's languages in system Settings:

<!-- Platforms/iOS/Info.plist AND Platforms/MacCatalyst/Info.plist -->
<key>CFBundleLocalizations</key>
<array>
  <string>en</string>
  <string>es</string>
  <string>fr</string>
</array>

Windows

<!-- Platforms/Windows/Package.appxmanifest -->
<Resources>
  <Resource Language="en-US" />
  <Resource Language="es" />
  <Resource Language="fr-FR" />
</Resources>

Android

Android picks up .resx-based localization automatically. No additional manifest entries required. ✅

Runtime language switching — x:Static trap

<!-- ❌ Won't update when language changes at runtime -->
<Label Text="{x:Static resx:AppResources.WelcomeMessage}" />

<!-- ✅ Updates dynamically via INotifyPropertyChanged -->
<Label Text="{Binding [WelcomeMessage], Source={x:Static local:LocalizationResourceManager.Instance}}" />

When switching culture, set all three properties or formatting is inconsistent:

// ✅ Complete culture switch
var culture = new CultureInfo("es");
CultureInfo.CurrentUICulture = culture;  // resource lookup
CultureInfo.CurrentCulture = culture;     // dates/numbers
AppResources.Culture = culture;           // ResourceManager

// ❌ Only sets UI culture — dates/numbers stay in old culture
CultureInfo.CurrentUICulture = new CultureInfo("es");

RTL layout — set FlowDirection at page level

<!-- ✅ Page-level — children inherit -->
<ContentPage FlowDirection="RightToLeft">
  <StackLayout FlowDirection="MatchParent" />
</ContentPage>

<!-- ❌ Only on child — parent still LTR, layout breaks -->
<ContentPage>
  <StackLayout FlowDirection="RightToLeft" />
</ContentPage>

VS Code pitfall

⚠️ .Designer.cs may not regenerate on save. Add to .csproj and run dotnet build after .resx changes:

<CoreCompileDependsOn>PrepareResources;$(CoreCompileDependsOn)</CoreCompileDependsOn>

Decision framework

NeedApproach
Static multilingual strings.resx files with x:Static bindings
Runtime language switchingLocalizationResourceManager with INotifyPropertyChanged bindings
Culture-specific imagesName images banner_{culture}.png or store paths in .resx
RTL supportSet FlowDirection at page level, detect with TextInfo.IsRightToLeft
Date/number formattingSet CultureInfo.CurrentCulture alongside CurrentUICulture

Quick checklist

  • [ ] NeutralLanguage set in .csproj
  • [ ] Default AppResources.resx contains all keys
  • [ ] Each target language has its own AppResources.{culture}.resx
  • [ ] iOS/Mac: CFBundleLocalizations lists all supported languages
  • [ ] Windows: Package.appxmanifest declares <Resource Language="..." />
  • [ ] RTL cultures set FlowDirection at page/app level
  • [ ] Runtime switching sets all three: CurrentUICulture, CurrentCulture, AppResources.Culture
  • [ ] dotnet build regenerates .Designer.cs after .resx changes

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.