x:Static不使用:CommunityToolkit.MvvmでDIを利用した、実務的なWPFでの国際化対応(多言語対応)

DIを使いながら、国際化対応(多言語対応)をしよう 今やグローバル時代!世界を相手にしなければ勝てない! そう、東京弁だけでなく大阪弁、名古屋弁、博多弁など…ごめんなさい調子に乗りました、単純に「日本語」「英語」「ロシア語」対応について語ります。(天丼) 今回は総集編として カップ麺シリーズ:一から学べる、WPFでの多言語対応方法 を、DI込みの記事として公開します。 本記事では、WPFでCommunityToolkit.Mvvm+DI構成を取りつつ、アプリを実務的に多言語対応させる方法を解説します。 「x:Staticを使わずに切り替えたい」「コードビハインドを汚したくない」 そんな悩みに答えるべく、依存性注入によるResourceManager活用+ViewModel連携まで、丁寧に紹介していきます。 最初にプロジェクトを作ろう 今回は「WPFアプリケーション」で DIMultiLanguageTest というプロジェクトを作りましょう。フレームワークは「.NET 9.0」を利用します。 プロジェクトに Views と ViewModel フォルダを作ります。 そして開かれた MainWindow.xaml を Views フォルダに移動して、以下のようにします。 <Window x:Class="DIMultiLanguageTest.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:local="clr-namespace:DIMultiLanguageTest" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Title="DIMultiLanguageTest" Width="800" Height="450" mc:Ignorable="d"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <Menu> <MenuItem Header="Language"> <MenuItem Command="{Binding ToJapaneseCommand}" Header="Japanese" /> <MenuItem Command="{Binding ToEnglishCommand}" Header="English" /> <MenuItem Command="{Binding ToRussianCommand}" Header="Russian" /> </MenuItem> </Menu> <Button Grid.Row="1" Margin="5" Command="{Binding ExecuteGreetingsCommand}" Content="{Binding Greetings}" /> </Grid> </Window> MainWindow.xaml のフォルダを移動したので、このままでは例外で落ちるため、App.xaml を以下のように書き換えます。 <Application x:Class="DIMultiLanguageTest.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:DIMultiLanguageTest" StartupUri="Views/MainWindow.xaml"> <Application.Resources /> </Application> わかると思いますが、MainWindow.xaml を移動した Views\ を StartupUri に書き加えたわけですね。 ...

2025年04月11日 · (2025年06月19日 更新) · 3 分 · ☨もりゃき.xyz☨

カップ麺シリーズ:一から学べる、WPFでの多言語対応方法

多言語対応をしよう 今やグローバル時代!世界を相手にしなければ勝てない! そう、東京弁だけでなく大阪弁、名古屋弁、博多弁など…ごめんなさい調子に乗りました、単純に「日本語」「英語」「ロシア語」対応について語ります。 真面目な話、ソフトウェアで最低限英語対応すると、ターゲットが英語圏の人にまで届く可能性が高まります。 もちろん、ドキュメントも英語化が必要ですけど、今ならDeepLとか使えば便利にそれっぽく翻訳してくれますからね。 さらにChatGPTで添削とかさせれば、ニュアンス踏まえて指摘してくれますよ! 今回は、WPFにおいてViewとViewModelだけを使った、極めてシンプルな多言語対応サンプルを示したいと思います。 プロジェクト作成 今回は「WPFアプリケーション」で MultiLanguageTest というプロジェクトを作りましょう。フレームワークは「.NET 9.0」を使用します。 そして開かれた MainWindow.xaml を以下のようにしましょう。 「Language」の中に「Japanese」「English」「Russian」として、ウィンドウ内全域にボタンを貼り付けているだけです。 <Window x:Class="MultiLanguageTest.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:MultiLanguageTest" mc:Ignorable="d" Title="MultiLanguageTest" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <Menu> <MenuItem Header="Language"> <MenuItem Header="Japanese" Command="{Binding ToJapanese}"/> <MenuItem Header="English" Command="{Binding ToEnglish}"/> <MenuItem Header="Russian" Command="{Binding ToRussian}"/> </MenuItem> </Menu> <Button Grid.Row="1" Margin="5" Content="{Binding Greetings}" Command="{Binding ExecuteGreetings}"/> </Grid> </Window> シンプルなテストなので、UIに関しては最低限の実装になっています。画面とかは本題じゃないからいいよね? 下準備に CommunityToolkit.Mvvm の導入 利便性のため、NuGetで CommunityToolkit.Mvvm を導入します。 メニューの「ツール」-「NuGetパッケージマネージャ」-「ソリューションのNuGetパッケージの管理」から、 「参照」タブをクリックして CommunityToolkit.Mvvm を検索してプロジェクトにインストールします。 ライセンスが不安かも知れませんが CommunityToolkit.Mvvm はMITライセンスという、オープンソースライセンスの中で最も緩いライセンスです。 CommunityToolkit.Mvvm 自体を配布しないのであれば、商用とかクローズドソースもOKなので心配は要らないでしょう。 ほら、あの Xamarin で使われていた(もう過去形なんだよな…) Mono と同じライセンスです。 っていうか、これは CommunityToolkit.Mvvm 覚え書きに書くべき内容だったか…? 自分の目で確認したい方は.NET Community Toolkitをどうぞ。 ...

2024年11月12日 · (2025年06月19日 更新) · 3 分 · ☨もりゃき.xyz☨