WPF 本地化介紹
WPF 本地化是將應用程式資源轉換為支援該應用程式的特定地區性的本地化版本。您必須將數據轉換為適合的語言,以獲取適當的資訊。
WPF 本地化的目的是什麼?
- 當您開發應用程式並且您的應用程式只有一種語言可用時,那麼您就限制了您的客戶群和業務規模,因為許多使用者無法使用此應用程式。
- 如果你想增加你的客戶群和業務,那麼你的產品必須是可用的,並且可以透過你的合適語言的簡單資訊讓全球觀眾接觸到。成本效益高的產品本地化是聯繫更多客戶並加入應用程式的最佳和最經濟的方法之一。
- 正如我們所知,這個世界上有那麼多的人,有那麼多的語言。在這種情況下,WPF 本地化將產生顯著的影響。
- 因為人們希望項目中的有用資訊和良好的功能沒有任何障礙。
- 它可以為您提供有關適當使用者語言的所有資訊。
WPF 本地化有哪些類型?
WPF 中有兩種類型的 WPF 本地化。
- 靜態 WPF 本地化。
- 動態 WPF 本地化。
靜態 WPF 本地化
- 靜態 WPF 本地化對於將靜態數據轉換為另一種語言非常有用。
- 它對於靜態項目很有用,因為它可以定義為所有要翻譯成另一種語言的資訊。由於許多人利用網際網路獲取資訊,這種情況對於另一個國家的居民來說是很有用的,因為他們可以輕鬆地獲取資訊。
動態 WPF 本地化
- 用於動態數據的動態 WPF 本地化。
- 這種類型的本地化對於以動態格式獲取數據非常有用。
- 在動態格式中有太多的資訊要獲取,在這種情況下,根據使用者的需要很容易將其翻譯成另一種語言。因此,這些特性起著至關重要的作用。
- 動態 WPF 本地化利用資源字典檔案來獲取數據並將其從一種語言翻譯到另一種語言。
資源字典檔案範例
程式碼
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
</ResourceDictionary>
透過加入命名空間使用資源字典。
命名空間
xmlns:sys="clr-namespace:System;assembly=mscorlib"
將資源字典檔案中的數據加入到下面的程式碼中,如下所示,
程式碼
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
>
<sys:String x:Key="ResourceDictionaryName">Loc-en-US</sys:String>
<sys:String x:Key="WindowTitle">Dynamic Localizzation in wpf</sys:String>
<sys:String x:Key="FirstNameLabel">First Name</sys:String>
<sys:String x:Key="LastNameLabel">Last Name</sys:String>
</ResourceDictionary>
如何在項目中使用 WPF 本地化?
第 1 步
為 WPF 本地化建立一個新項目。
第 2 步
然後安裝最新版本的 WPF 本地化擴展包:WPFLocalizeExtension。

第 3 步
加入資源檔案。

安裝後,加入資源檔案(如上圖),開啟 Resources.resx 檔案。
新增加的資源檔案:

第 4 步
我們需要將存取修飾詞變更為 public,現在您可以在主頁面中使用剛加入的資源了(即右鍵資源檔案屬性,將自訂工具(Custom Tool)改為 PublicResXFileCodeGenerator 即可,否則執行程式會報錯)。
第 5 步
您可以在 resources.resx 檔案中看到使用者的設計。
第 6 步
建立一個新檔案,按照步驟操作。
「右鍵點擊專案名稱 -> 點擊加入按鈕 -> 然後點擊新增項目 -> 然後點擊 visual C# 項目 -> 然後尋找資源檔案 -> 然後定義檔案名稱。」
注意
但若要宣告為 Resources.fr-FR.resx 和 Resources.gr-GR 範例的檔案名稱。
檔案名稱:下面的 Resources.resx 檔案,

檔案名稱:下面的 Resources.fr-FR.resx 檔案。

第 7 步
現在,您可以使用下面的命名空間在 MainWindow.xaml 檔案中加入該檔案,
範例,
「xmlns:CC="clr-namespace:WpfApp1Localization.Properties"」
第 8 步
現在可以使用 App.xaml.cs 檔案呼叫資源檔案,即啟動專案時讀取本地語言,進行語言切換。
程式碼
namespace WpfApp1Localization {
public partial class App: Application {
App() {
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("gr-GR");
//System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
}
}
}
第 9 步
現在儲存專案的所有檔案並執行該專案。
第 10 步
在 WPF 本地化中使用 WPF 中的靜態 WPF 本地化輸出專案。
輸出

WPF 本地化範例專案
- 現在首先建立一個新的專案,專案名稱是:WPFLocalizationDemo
- 然後建立兩個檔案:Resources.en.resx 和 Resources.gr-GR.resx
- 將數據欄位加入到兩個檔案中。
Resources.en.resx

Resources.gr-Gr.resx

資源檔案中表數據的說明
建立一個按鈕 1 – 送出文字將被送出。
建立一個按鈕 2 – 註冊使用者。
建立一個按鈕 3 – 取消或重設登入表單中的數據。
建立一個標籤 1 – 登入表單的標題和提示。
建立一個標籤 2 – 用於輸入使用者名稱的標籤提示。
建立一個標籤 3 – 輸入密碼的標籤提示。
- 在下列的 XAML 檔案中透過加入命名空間來加入資源檔案:
程式碼
<Window
x:Class="WpfApp1Localization.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:WpfApp1Localization"
xmlns:CC="clr-namespace:WpfApp1Localization.Properties"
mc:Ignorable="d"
Title="{x:Static CC:Resources.Log_In}"
Height="450"
Width="800"
Background="Chocolate"
>
<Grid>
<TextBox
HorizontalAlignment="Left"
Height="23"
FontSize="12"
Margin="412,152,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="120"
/>
<TextBox
HorizontalAlignment="Left"
Height="23"
FontSize="12"
Margin="412,233,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="120"
/>
<label
x:Name="label1"
Content="{x:Static CC:Resources.Log_In}"
HorizontalAlignment="Left"
FontSize="18"
Margin="338,72,0,0"
VerticalAlignment="Top"
RenderTransformOrigin="0.526,2.491"
/>
<label
x:Name="label2"
Content="{x:Static CC:Resources.User_Name}"
HorizontalAlignment="Left"
FontSize="12"
Margin="245,152,0,0"
VerticalAlignment="Top"
/>
<label
x:Name="label3"
Content="{x:Static CC:Resources.Password}"
HorizontalAlignment="Left"
FontSize="12"
Margin="245,233,0,0"
VerticalAlignment="Top"
/>
<button
x:Name="button1"
Content="{x:Static CC:Resources.Submit}"
HorizontalAlignment="Left"
Margin="338,330,0,0"
VerticalAlignment="Top"
Width="75"
/>
<button
x:Name="Button2"
Content="{x:Static CC:Resources.Registration}"
HorizontalAlignment="Left"
Margin="245,340,0,0"
VerticalAlignment="Top"
Width="75"
/>
<button
x:Name="Button3"
Content="{x:Static CC:Resources.Cancel}"
HorizontalAlignment="Left"
Margin="532,335,0,0"
VerticalAlignment="Top"
Width="75"
/>
</Grid>
</Window>
使用 app.xaml.cs 檔案呼叫資源檔案
程式碼
namespace WpfApp1Localization {
public partial class App: Application {
App() {
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("gr-GR");
//System.Threading.Thread.CurrentThread.CurrentUICulture =
new System.Globalization.CultureInfo("en");
}
}
}
程式或專案的輸出,
談到輸出設計,它看起來像下面這樣。
英文登入表單如下:

以下為德文登入表單:

結論
在這個部落格中,我們了解了 WPF 本地化,它的重要性,它的類型,以及它是如何實際運作的。這是理解 WPF 概述的主要概念之一,它將有助於應用程式解決語言障礙的問題。
原文連結:https://www.c-sharpcorner.com/blogs/an-overview-of-wpf-localization-extension-with-an-example