WPFはカスタムXMLファイルで国際化を実現

WPFはカスタムXMLファイルで国際化を実現

この記事では、必要なNuGetパッケージのインストール、言語リストの動的取得、言語の動的切り替え、コードとxamlインターフェイスでの翻訳文字列の使用、開発者がWPFアプリケーションを簡単に国際化できるようにするソースコードへのリンクなど、WPFプログラムでカスタムXMLファイルを使用した国際化の方法について詳しく説明します。

最后更新 2025/01/26 6:02
沙漠尽头的狼
预计阅读 5 分钟
分类
WPF
标签
.NET C# WPF NuGet 国際化は

在当今全球化的软件开发环境中,应用程序的国际化变得越来越重要。它可以让你的软件适应不同地区和语言的用户,提升用户体验。本文和 《Avalonia使用XML文件实现国际化》 类似,今天介绍的包只用于WPF程序,下面我们将简单介绍其用法。

必要なNuGetパッケージのインストール

WPFプログラムでカスタムXMLファイルを使用して国際化するには、まず重要なNuGetパッケージをインストールする必要があります。Visual StudioのNuGet Package Managerコンソールで、次のコマンドを実行します。

Install-Package WPFXmlTranslator

このパッケージは、国際化に必要なコア機能とツールを提供します。

言語リストを動的に取得

多言語対応のアプリケーションでは、ユーザーが好みの言語を選択できるようにすることが重要です。以下のコードを使用すると、言語のリストを簡単に取得できます。

List<LocalizationLanguage> languages = I18nManager.Instance.Resources.Select(kvp => kvp.Value).ToList();

这里的 I18nManagerWPFXmlTranslator 包提供的一个管理类,它负责处理国际化相关的资源。Resources 属性存储了所有可用的语言资源,我们通过 Select 方法将其转换为 LocalizationLanguage 对象的列表。

ここで、LocalizationLanguageクラスは次のように定義されます。

public class LocalizationLanguage
{
    public string Language { get; set; } = (string) null;

    public string Description { get; set; } = (string) null;

    public string CultureName { get; set; } = (string) null;

    //...
}

LocalizationLanguage 类包含了语言的基本信息,如语言名称、描述和文化名称。获取到语言列表后,我们可以将其用于界面绑定,例如在下拉菜单中显示可供用户选择的语言选项,或者在其他需要展示语言信息的界面元素中进行数据绑定。

<ComboBox ItemsSource="{Binding Languages}"
      SelectedItem="{Binding SelectLanguage}"
      DisplayMemberPath="Language" />

在这个XAML代码中,我们创建了一个 ComboBox 控件,将其 ItemsSource 属性绑定到 Languages 列表,SelectedItem 属性绑定到 SelectLanguage 属性,DisplayMemberPath 属性设置为 Language,这样就可以在下拉菜单中显示语言列表供用户选择。

動的な言語切り替え

ユーザーがインターフェイス内で異なる言語を選択した後、コード内で動的に言語を切り替える必要があります。言語切り替えを実装するコード例を以下に示します。

var culture = new CultureInfo(language);
I18nManager.Instance.Culture = culture;

这里的 language 参数为 LocalizationLanguage 类的 CultureName 属性值。CultureInfo 类是.NET框架中用于表示特定文化的类,通过设置 I18nManager.Instance.Culture 属性为相应的 CultureInfo 对象,我们可以实现界面语言的即时切换,为用户提供无缝的国际化体验。

コードでの翻訳文字列の使用

コード内では、強型キーに基づいて現在の言語文化の翻訳文字列を簡単に取得できます。例えば:

var titleCurrentCulture = I18nManager.Instance.GetResource(Localization.Main.MainView.Title); // 获取当前语言
var titleZhCN = I18nManager.Instance.GetResource(Localization.Main.MainView.Title, "zh-CN");	// 获取中文简体
var titleEnUS = I18nManager.Instance.GetResource(Localization.Main.MainView.Title, "en-US");	// 获取英文

I18nManager.Instance.GetResource 方法用于获取指定语言的翻译字符串。第一个参数是强类型的语言Key,它指向XML语言文件中的某个具体的翻译项。第二个参数是可选的,用于指定具体的语言文化名称。通过这种方式,我们可以在代码的任何地方灵活地使用翻译文本,确保界面显示的内容与用户选择的语言相匹配。

Xamlインターフェイスでの使用

XamlインターフェイスでXMLを使用してファイルを翻訳するのも簡単です。まず、適切な名前空間を導入する必要があります:

xmlns:language="clr-namespace:Localization"
xmlns:markup="https://codewf.com"

その中で、“markup”は以前にインストールした補助ライブラリ名前空間で、インターフェイスで翻訳テキストをバインドするための“I 18 n”マークアップ拡張ヘルプクラスを提供します。“language”は、XML言語ファイルの言語キーに関連付けることができるT 4ファイル用のC#強型付き言語キー関連クラス名前空間を生成します。

コントロールで翻訳テキストを使用する例を次に示します。

<Button Content="{markup:I18n {x:Static language:ChoiceLanguagesView.LanguageKey}}" />

上の例では、ButtonコントロールのContentプロパティは、“I 18 n”タグ拡張により、“ChoiceLanguagesView.LanguageKey”に対応する翻訳テキストにバインドされています。これにより、インタフェースの言語が変更されると、ボタンの表示テキストも自動的に対応する言語の翻訳コンテンツに更新されます。

言語指定もサポートします。

<StackPanel>     <StackPanel Orientation="Horizontal">
         <TextBlock Text="Current Thread" />
         <TextBlock Text="{markup:I18n {x:Static language:DevelopModule.Title2SlugView.Title}}"></TextBlock>
     </StackPanel>
     <StackPanel Orientation="Horizontal">
         <TextBlock Text="en-US" />
         <TextBlock Text="{markup:I18n {x:Static language:DevelopModule.Title2SlugView.Title}, CultureName=en-US}" />
     </StackPanel>
     <StackPanel Orientation="Horizontal">
         <TextBlock Text="ja-JP" />
         <TextBlock Text="{markup:I18n {x:Static language:DevelopModule.Title2SlugView.Title}, CultureName=ja-JP}" />
     </StackPanel>
     <StackPanel Orientation="Horizontal">
         <TextBlock Text="zh-CN" />
         <TextBlock Text="{markup:I18n {x:Static language:DevelopModule.Title2SlugView.Title}, CultureName=zh-CN}" />
     </StackPanel>
     <StackPanel Orientation="Horizontal">
         <TextBlock Text="zh-Hant" />
         <TextBlock Text="{markup:I18n {x:Static language:DevelopModule.Title2SlugView.Title}, CultureName=zh-Hant}" />
     </StackPanel>
 </StackPanel>

在这个示例中,我们创建了一个 StackPanel 布局,其中包含多个子 StackPanel,每个子 StackPanel 显示不同语言的翻译文本。通过在 I18n 标记扩展中指定 CultureName 属性,我们可以显示特定语言的翻译内容。

さらに、xamlインタフェースは動的キーのバインディングをサポートしています。

<u:Banner
    Content="{markup:I18n {Binding SelectedMenuItem.Description}}"
    Header="{markup:I18n {Binding SelectedMenuItem.Name}}"
    Type="{Binding SelectedType}" />

この例では、バナーコントロールのContentプロパティとHeaderプロパティは、それぞれ動的なSelectedMenuItem.DescriptionプロパティとSelectedMenuItem.Nameプロパティにバインドされており、“I 18 n”タグ拡張により動的に翻訳されたテキストの表示が可能になります。

まとめまとめまとめ

Avaloniaのバージョンと同じように、NuGetパッケージのソースコードと使用例を含むWPFのソースコードを以下に示します。

通过使用自定义XML文件和 WPFXmlTranslator 包,我们可以方便地实现WPF应用程序的国际化。这种方法不仅简单易用,而且具有很强的灵活性,可以满足不同应用场景的需求。希望本文对你有所帮助,让你的WPF应用能够走向更广阔的国际市场。

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2024/01/25

C#WPFにおけるFluentValidationの使用

この記事では、C#WPFプロジェクトでFluentValidationをプロパティ検証に使用する方法を詳しく見て、MVVMパターンでこれを実装する方法を示します。

继续阅读