如何在多文化應用程序中為表單控件、字符串和圖像啟用RTL模式
本文介紹如何本地化表單資源(文本和圖像),并添加對多種語言的支持,包括使用從右向左書寫系統的語言,它還展示了如何使用作為RTL-aware 表單中控件的容器。
假設以下UI需要支持RTL模式。
這是一個表單),包含一個XtraTabControl和一個選項卡頁,這個標簽頁包含一個LayoutControl,其中包含和控件。
下圖是本地化為Hebrew的表單并詳細介紹了本地化表單的步驟。
Visual Studio提供的Windows表單本地化機制可以幫助您添加對RTL模式的支持并本地化表單資源(文本和圖像),此機制基于資源文件,資源文件被自動編譯為包含區域性特定數據的附屬程序集。
如何本地化表單并啟用RTL模式
按照下面列出的步驟,在XtraForm、RibbonForm或TabForm中支持從右向左的語言。
1.在 Properties窗口中,將表單的Localizable屬性設置為true。
2.從language屬性下拉列表中選擇所需的語言。
選擇所需語言后,可以指定與默認區域性不同的表單設置,與表單布局相對應的特定于語言的設置存儲會在由Visual Studio自動創建的基于表單的資源文件中。您可以在Solution Explorer window窗口的表單文件下方找到此文件,通常文件名包含一個表示相應區域性的后綴。
3.將表單的 RightToLeft 屬性設置為Yes,這將啟用表單的RTL模式,默認情況下所有子控件都繼承此設置。
4.將表單的RightToLeftLayout設置為true,反轉(鏡像)表單的控件布局,此選項僅在RightToLeft 屬性設置為Yes時有效。
表單的RightToLeftLayout屬性不能被子控件容器繼承,某些控件容器(例如,標準的Windows窗體TabControl)提供了自己的RightToLeftLayout屬性,這些控制容器啟用此屬性。
提示:默認情況下,DevExpress 容器控件會自動鏡像為 RTL 模式,一些容器控件(例如)提供自己DefaultBoolean類型的RightToLeftLayout屬性,將此屬性設置為 False 可防止此控件在 RTL 模式下自動布局鏡像。
5.如果表單上存在不支持自動控件鏡像的控件容器,則必須手動反轉該容器中的控件布局。
例如,標準的Windows窗體面板不支持自動控制鏡像,因此如果Panel包含OK或Cancel 按鈕,則必須手動顛倒順序。
默認模式下的面板示例:
RTL模式下的面板示例:
請注意,雖然文本方向發生更改(冒號出現在從右到左定向字符串的末尾),但布局仍保持從左到右對齊,使用作為控件的容器可以解決此問題,當啟用RTL模式時,LayoutControl會自動反轉布局。
在默認模式下,將相同的UI放在LayoutControl中:
在RTL模式下將相同的UI放在LayoutControl中:
6.通過 Properties 窗口為所有表單控件設置自定義的本地化字符串和圖像,這些值會自動保存到相應的基于表單的資源文件中。
要本地化消息框中的字符串,請使用項目資源文件 。
您可能還想將DevExpress控件和組件的嵌入文本(例如,GridControl的中的文本)本地化為自己的語言,這個機制在通過附屬資源程序集本地化WinForms控件文檔中有描述。
本主題中描述的方法利用來獲取附屬資源程序集,下載程序集時找到具有相應區域性縮寫的文件夾(例如,他表示希伯來文化),并將其復制到應用程序的可執行文件目錄中,不需要編寫額外的代碼,因為應用程序會自動確定當前區域性并在啟動時加載適當的程序集。
在使用目標語言(Hebrew)的操作系統上顯示表單后,RTL模式將啟用,UI將自動翻譯,可以通過在應用程序啟動時顯式指定UI區域性來檢查結果,如下面的代碼片段所示:
C#:
using System.Globalization; using System.Threading; Thread.CurrentThread.CurrentCulture = new CultureInfo("he"); Thread.CurrentThread.CurrentUICulture = new CultureInfo("he");
VB.NET:
Imports System.Globalization Imports System.Threading Thread.CurrentThread.CurrentCulture = New CultureInfo("he") Thread.CurrentThread.CurrentUICulture = New CultureInfo("he")