WPF C#/VB
Make Your App Multilingual
C#
// AZUL CODING ---------------------------------------
// WPF C#/VB - Make Your App Multilingual
// https://youtu.be/FJSJLf76mBM
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Threading;
using System.Globalization;
namespace Multilingual_App
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Watch the video to see how to add the following resource string
OtherTxt.SetResourceReference(ContentProperty, "OtherStr");
SetLang(Properties.Settings.Default.lang);
}
private void LangBtns_Click(object sender, RoutedEventArgs e)
{
SetLang(((Button)sender).Tag.ToString());
}
private void SetLang(string lang)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
Application.Current.Resources.MergedDictionaries.Clear();
ResourceDictionary resdict = new ResourceDictionary()
{
Source = new Uri($"/Dictionary-{lang}.xaml", UriKind.Relative)
};
Application.Current.Resources.MergedDictionaries.Add(resdict);
EnglishBtn.IsEnabled = true;
FrenchBtn.IsEnabled = true;
SpanishBtn.IsEnabled = true;
switch (lang)
{
case "en-US":
EnglishBtn.IsEnabled = false;
break;
case "fr-FR":
FrenchBtn.IsEnabled = false;
break;
case "es-ES":
SpanishBtn.IsEnabled = false;
break;
default:
break;
}
Properties.Settings.Default.lang = lang;
Properties.Settings.Default.Save();
}
}
}
VB.NET
' AZUL CODING ---------------------------------------
' WPF C#/VB - Make Your App Multilingual
' https://youtu.be/FJSJLf76mBM
Imports System.Threading
Imports System.Globalization
Class MainWindow
Public Sub New()
InitializeComponent()
OtherTxt.SetResourceReference(ContentProperty, "OtherStr")
SetLang(My.Settings.lang)
End Sub
Private Sub LangBtns_Click(sender As Button, e As RoutedEventArgs)
SetLang(sender.Tag.ToString())
End Sub
Private Sub SetLang(lang As String)
Thread.CurrentThread.CurrentCulture = New CultureInfo(lang)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(lang)
Application.Current.Resources.MergedDictionaries.Clear()
Dim resdict As ResourceDictionary = New ResourceDictionary() With {
.Source = New Uri($"/Dictionary-{lang}.xaml", UriKind.Relative)
}
Application.Current.Resources.MergedDictionaries.Add(resdict)
EnglishBtn.IsEnabled = True
FrenchBtn.IsEnabled = True
SpanishBtn.IsEnabled = True
Select Case lang
Case "en-US"
EnglishBtn.IsEnabled = False
Case "fr-FR"
FrenchBtn.IsEnabled = False
Case "es-ES"
SpanishBtn.IsEnabled = False
Case Else
End Select
My.Settings.lang = lang
My.Settings.Save()
End Sub
End Class
MainWindow.xaml
<!-- AZUL CODING --------------------------------------- -->
<!-- WPF C#/VB - Make Your App Multilingual -->
<!-- https://youtu.be/FJSJLf76mBM -->
<Window x:Class="Multilingual_App.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Multilingual_App"
mc:Ignorable="d"
Title="Azul Coding" Height="296" Width="566" WindowStartupLocation="CenterScreen" ResizeMode="CanMinimize">
<Grid>
<StackPanel VerticalAlignment="Center">
<!-- Watch the video to see how to add the resource dictionaries that contain the following resources -->
<!-- "Welcome" -->
<Label Content="{DynamicResource TitleStr}" FontSize="24" FontWeight="SemiBold" HorizontalAlignment="Center"/>
<!-- "This is an example multilingual app" -->
<Label Content="{DynamicResource SubtitleStr}" FontSize="16" HorizontalAlignment="Center"/>
<!-- Text added in code-behind: "This is some other text" -->
<Label x:Name="OtherTxt" Content="" FontSize="14" HorizontalAlignment="Center"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0,25,0,0">
<Button x:Name="EnglishBtn" Content="English" Tag="en-US" Padding="10,5" FontSize="16" FontWeight="SemiBold" IsEnabled="False" Click="LangBtns_Click"/>
<Button x:Name="FrenchBtn" Content="Français" Tag="fr-FR" Padding="10,5" FontSize="16" FontWeight="SemiBold" Margin="10,0,0,0" Click="LangBtns_Click"/>
<Button x:Name="SpanishBtn" Content="Español" Tag="es-ES" Padding="10,5" FontSize="16" FontWeight="SemiBold" Margin="10,0,0,0" Click="LangBtns_Click"/>
</StackPanel>
</StackPanel>
</Grid>
</Window>
App.xaml
<!-- AZUL CODING --------------------------------------- -->
<!-- WPF C#/VB - Make Your App Multilingual -->
<!-- https://youtu.be/FJSJLf76mBM -->
<Application x:Class="Multilingual_App.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Multilingual_App"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Dictionary-en-US.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>