Skip to content

Commit

Permalink
feat: add multi-language support(Chinese, English and French) to stat…
Browse files Browse the repository at this point in the history
…ic text in .xaml (#7)

* feat: add multi-language support(Chinese, English and French) to static text in .xaml

* feat(wpf): remove redundant i18n files

---------

Co-authored-by: windowsair <msdn_02@sina.com>
  • Loading branch information
kerms and windowsair committed Oct 16, 2023
1 parent 04df61e commit feb01f0
Show file tree
Hide file tree
Showing 10 changed files with 881 additions and 37 deletions.
7 changes: 4 additions & 3 deletions elaphureLink.Wpf/Pages/ExitConfirmDialog.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,13 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ui="http://schemas.modernwpf.com/2019"
xmlns:language="clr-namespace:elaphureLink.Wpf.Properties.i18n"

PrimaryButtonText="Exit"
SecondaryButtonText="Cancel"
PrimaryButtonText="{x:Static language:lang.exit}"
SecondaryButtonText="{x:Static language:lang.cancel}"
DefaultButton="Secondary">

<TextBlock Text="Are you sure you want to exit?" TextAlignment="Center" VerticalAlignment="Center" FontSize="26"/>
<TextBlock Text="{x:Static language:lang.areYouSureExit}" TextAlignment="Center" VerticalAlignment="Center" FontSize="26"/>
</ui:ContentDialog>


Expand Down
14 changes: 8 additions & 6 deletions elaphureLink.Wpf/Pages/HomePage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True}"
xmlns:language="clr-namespace:elaphureLink.Wpf.Properties.i18n"
>
<UserControl DataContext="{Binding HomePageViewModel, Source={StaticResource ViewModelLocator}}">
<Grid Margin="10">
Expand All @@ -37,7 +38,8 @@
</MultiBinding>
</ui:ProgressBar.Visibility>
</ui:ProgressBar>
<TextBlock FontSize="48" FontFamily="Century Gothic" HorizontalAlignment="Center">elaphureLink</TextBlock>
<TextBlock FontSize="48" FontFamily="Century Gothic" HorizontalAlignment="Center" Text="{x:Static language:lang.elaphureLink}"></TextBlock>
<TextBlock FontSize="16" FontFamily="Century Gothic" HorizontalAlignment="Center" Text="{x:Static language:lang.keilWirelessProxy}"></TextBlock>
<Grid Margin="0,50,0,0">
<Grid.ColumnDefinitions>
<!-- 20% margin-left margin-right -->
Expand All @@ -51,7 +53,7 @@
VerticalAlignment="Center"
Orientation="Horizontal"
HorizontalAlignment="Left">
<TextBlock FontSize="16">Device Address</TextBlock>
<TextBlock FontSize="16" Text="{x:Static language:lang.deviceIPAddress}"></TextBlock>
</StackPanel>
<StackPanel
Orientation="Horizontal"
Expand All @@ -64,7 +66,7 @@
VerticalAlignment="Center"
Orientation="Horizontal"
HorizontalAlignment="Left">
<TextBlock FontSize="16">Log Level</TextBlock>
<TextBlock FontSize="16" Text="{x:Static language:lang.logLevel}"></TextBlock>
</StackPanel>
<StackPanel
Orientation="Horizontal"
Expand All @@ -83,20 +85,20 @@
VerticalAlignment="Center"
Orientation="Horizontal"
HorizontalAlignment="Left">
<TextBlock FontSize="16">Install Driver</TextBlock>
<TextBlock FontSize="16" Text="{x:Static language:lang.installKeilDriver}"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button
IsEnabled="{Binding InstallDriverCommand.IsRunning, Converter={StaticResource BooleanInverseConverter}}"
Command="{Binding InstallDriverButtonCommand}">Install</Button>
Command="{Binding InstallDriverButtonCommand}" Content="{x:Static language:lang.install}"></Button>
</StackPanel>
</Grid>
<Grid>
<StackPanel
VerticalAlignment="Center"
Orientation="Horizontal"
HorizontalAlignment="Left">
<TextBlock FontSize="16">Start Proxy</TextBlock>
<TextBlock FontSize="16" Text="{x:Static language:lang.startProxy}"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<!-- Hide Toggle Switch with width 41 -->
Expand Down
15 changes: 8 additions & 7 deletions elaphureLink.Wpf/Pages/InfoPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
DataContext="{Binding InfoPageViewModel, Source={StaticResource ViewModelLocator}}"
Title="InfoPage">
Title="InfoPage"
xmlns:language="clr-namespace:elaphureLink.Wpf.Properties.i18n"
>

<Grid Margin="12,10,10,10" d:DataContext="{d:DesignInstance IsDesignTimeCreatable=True}">
<Grid.RowDefinitions>
Expand All @@ -24,16 +26,15 @@
<StackPanel
Orientation="Horizontal"
>
<TextBlock FontSize="14" Text="Version" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock FontSize="14" Text="{x:Static language:lang.version}" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock FontWeight="Bold" FontSize="14" Text="{Binding GitVersionText}" VerticalAlignment="Center"/>
<Button Margin="20,0,0,0"
VerticalAlignment="Center"
IsEnabled="{Binding CheckUpdateButtonCommand.IsRunning, Converter={StaticResource BooleanInverseConverter}}"
Command="{Binding CheckUpdateButtonCommand}"
>Check Update</Button>
Command="{Binding CheckUpdateButtonCommand}" Content="{x:Static language:lang.checkUpdate}"></Button>
</StackPanel>
<StackPanel Orientation="Horizontal">
<TextBlock FontSize="14" Text="Project Homepage" VerticalAlignment="Center" Margin="0,0,5,0"/>
<TextBlock FontSize="14" Text="{x:Static language:lang.projectHomePage}" VerticalAlignment="Center" Margin="0,0,5,0"/>
<ui:HyperlinkButton Content="https://github.com/windowsair/elaphureLink" NavigateUri="https://github.com/windowsair/elaphureLink"/>
</StackPanel>
</StackPanel>
Expand All @@ -42,7 +43,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="Contributor" FontSize="18"/>
<TextBlock Text="{x:Static language:lang.contributor}" FontSize="18"/>
<ListView Grid.Row="1">
<ListView.Items>
<Label Content="windowsair"/>
Expand All @@ -54,7 +55,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="Thirdparty Library" FontSize="18"/>
<TextBlock Text="{x:Static language:lang.thridPartyLib}" FontSize="18"/>
<ListView Grid.Row="1">
<ListView.Items>
<Label Content="Autoupdater.NET"/>
Expand Down
24 changes: 11 additions & 13 deletions elaphureLink.Wpf/Pages/RootPage.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:ui="http://schemas.modernwpf.com/2019"
mc:Ignorable="d" d:DesignWidth="900" d:DesignHeight="600"
Background="{DynamicResource SystemControlPageBackgroundAltHighBrush}">

Background="{DynamicResource SystemControlPageBackgroundAltHighBrush}"
xmlns:language="clr-namespace:elaphureLink.Wpf.Properties.i18n"
>
<Grid>
<ui:NavigationView IsBackEnabled="False"
IsBackButtonVisible="Collapsed"
Expand All @@ -24,14 +25,13 @@
<MenuItem.Header>
<ui:PathIcon Width="16" Height="16" Style="{StaticResource svgTranslate}"/>
</MenuItem.Header>
<MenuItem Header="English" CommandParameter="en" Command=""/>
<MenuItem Header="简体中文" CommandParameter="zh-cn" Command=""/>
<MenuItem Header="English" Click="LanguageItem_Click" CommandParameter="en"/>
<MenuItem Header="简体中文" Click="LanguageItem_Click" CommandParameter="zh-cn"/>
<MenuItem Header="Français" Click="LanguageItem_Click" CommandParameter="fr-fr"/>
</MenuItem>
</Menu>
<!-- Align with NavigationViewItem -->
<TextBlock Margin="1,0,0,0" VerticalAlignment="Center">
Language
</TextBlock>
<TextBlock Margin="1,0,0,0" VerticalAlignment="Center" Text="{x:Static language:lang.language}"></TextBlock>
</ui:SimpleStackPanel>

<ui:SimpleStackPanel Orientation="Horizontal">
Expand All @@ -43,22 +43,20 @@
</MenuItem>
</Menu>
<!-- Align with NavigationViewItem -->
<TextBlock Margin="1,0,0,0" VerticalAlignment="Center">
Theme
</TextBlock>
<TextBlock Margin="1,0,0,0" VerticalAlignment="Center" Text="{x:Static language:lang.theme}"></TextBlock>
</ui:SimpleStackPanel>


</StackPanel>
</ui:NavigationView.PaneCustomContent>

<ui:NavigationView.MenuItems>
<ui:NavigationViewItem Content="Home" Tag="HomePage" IsSelected="True">
<ui:NavigationViewItem Content="{x:Static language:lang.home}" Tag="HomePage" IsSelected="True">
<ui:NavigationViewItem.Icon>
<ui:PathIcon Style="{StaticResource svgHomeOutline}"/>
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>
<ui:NavigationViewItem Content="Log" Tag="LogPage" x:Name="RoomListPageNavigationViewItem">
<ui:NavigationViewItem Content="{x:Static language:lang.log}" Tag="LogPage" x:Name="RoomListPageNavigationViewItem">
<ui:NavigationViewItem.Icon>
<ui:PathIcon Style="{StaticResource svgLog}"/>
</ui:NavigationViewItem.Icon>
Expand All @@ -76,7 +74,7 @@
</ui:NavigationViewItem.Icon>
</ui:NavigationViewItem>

<ui:NavigationViewItem Content="Info" Tag="InfoPage">
<ui:NavigationViewItem Content="{x:Static language:lang.about}" Tag="InfoPage">
<ui:NavigationViewItem.Icon>
<ui:PathIcon Style="{StaticResource svgInformationOutline}"/>
</ui:NavigationViewItem.Icon>
Expand Down
31 changes: 31 additions & 0 deletions elaphureLink.Wpf/Pages/RootPage.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
using ModernWpf;
using ModernWpf.Controls;
using ModernWpf.Media.Animation;
using System.Threading;
using System.Globalization;

namespace elaphureLink.Wpf.Pages
{
Expand Down Expand Up @@ -91,5 +93,34 @@ NavigationViewSelectionChangedEventArgs args
this.MainFrame.Navigate(pageType, null, this.transitionInfo);
}
}

private void LanguageItem_Click(object sender, RoutedEventArgs e)
{
// Cast the sender as a MenuItem
if (sender is MenuItem item)
{
// Retrieve the CommandParameter
var language = item.CommandParameter as string;

// Handle the selected language
switch (language)
{
case "fr-fr":
case "zh-cn":
// Handle language selected
Thread.CurrentThread.CurrentCulture = new CultureInfo(language);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(language);
break;
default:
// Use the default .resx file which has no localizatition extention (e.g X.fr-FR.resx)
Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
Thread.CurrentThread.CurrentUICulture = CultureInfo.InvariantCulture;
break;
}

// Refresh the main window (or any other windows)
Application.Current.MainWindow.Content = new RootPage();
}
}
}
}
Loading

0 comments on commit feb01f0

Please sign in to comment.