如何在多文化應(yīng)用程序中為非基于表單的接口啟用RTL模式
您的應(yīng)用程序可能包含顯示自定義字符串和圖像的視覺元素,這些元素不存儲(chǔ)在表單資源中(例如,硬編碼字符串,消息框,DXPopupMenu等),把這些元素調(diào)整為從右到左模式還包括一個(gè)本地化步驟。
消息框
其字符串不存儲(chǔ)在表單資源中的典型元素是Message Box。與標(biāo)準(zhǔn)的MessageBox不同,當(dāng)檢測(cè)到RTL模式時(shí),XtraMessageBox會(huì)自動(dòng)調(diào)整(鏡像)其布局(對(duì)于標(biāo)準(zhǔn)的MessageBox需要啟用一個(gè)特殊的標(biāo)志),所以創(chuàng)建RTL-ready XtraMessageBox時(shí)要做的兩件事是:
- 翻譯消息框的自定義文本和標(biāo)題(如下面的演練所示)。
- 本地化標(biāo)準(zhǔn)按鈕的文本(OK, Cancel, Yes, No,等等),此任務(wù)對(duì)于顯示某些內(nèi)置可本地化資源的所有DevExpress控件都是通用的,并且在本地化文檔中有介紹。
在下圖中,您可以看到顯示默認(rèn)區(qū)域性的 XtraMessageBox。
啟用RTL模式的本地化XtraMessageBox。
DXPopupMenu
DXPopupMenu在RTL模式下自動(dòng)反轉(zhuǎn)其項(xiàng)目的布局,您只需要將自定義文本翻譯為目標(biāo)語言,如下所示:
下面的演練演示了如何在XtraMessageBox中本地化自定義文本,所示的文本本地化方法也適用于DXPopupMenu中的文本、硬編碼字符串等。
演練:如何在XtraMessageBox中本地化自定義字符串
雖然表單和控件中的字符串和圖像應(yīng)使用基于表單的資源進(jìn)行本地化,但非基于表單的用戶界面字符串和圖像(例如消息框中的字符串)必須使用項(xiàng)目資源進(jìn)行本地化,要使用基于非表單的資源文件為消息框提供特定于區(qū)域性的文本,請(qǐng)按照以下步驟操作。
1.在Visual Studio菜單欄中,調(diào)用 Project 菜單,然后單擊Add New Item,使用Add New Item對(duì)話框,創(chuàng)建一個(gè)新的資源文件,然后命名為Messages.resx,該文件用于默認(rèn)語言。
2.使用默認(rèn)區(qū)域性所需的字符串值填充數(shù)據(jù)表。
3.為本地化的應(yīng)用程序版本添加另一個(gè)新的資源文件并將文件命名為Messages.he.resx,文件名包含一個(gè)后綴,該后綴指定資源文件對(duì)應(yīng)的區(qū)域性。
4.使用 Solution Explorer window打開創(chuàng)建的文件,并用適當(dāng)?shù)淖址畛鋽?shù)據(jù)表。
5.要在調(diào)用 XtraMessageBox 時(shí)使用本地化字符串,請(qǐng)參閱以下代碼。
C#:
using System.Resources; //... private void button_Click(object sender, EventArgs e) { ResourceManager RM = new ResourceManager("WindowsFormsApplication1.Messages", typeof(Form1).Assembly); XtraMessageBox.Show( this.LookAndFeel, RM.GetString("strDiscardChangesMessage"), RM.GetString("strDiscardChangesCaption"), MessageBoxButtons.YesNoCancel ); }
VB.NET:
Imports System.Resources '... Private Sub Button_Click(sender As Object, e As EventArgs) Dim RM As New ResourceManager("WindowsFormsApplication1.Messages", GetType(Form1).Assembly) XtraMessageBox.Show(Me.LookAndFeel, RM.GetString("strDiscardChangesMessage"), RM.GetString("strDiscardChangesCaption"), MessageBoxButtons.YesNoCancel) End Sub
6.完成這些步驟后,如果應(yīng)用程序在使用 Hebrew的操作系統(tǒng)上運(yùn)行,則會(huì)自動(dòng)翻譯消息框中的自定義文本。
7.本地化內(nèi)置按鈕標(biāo)題,如通過附屬資源程序集本地化WinForms控件文檔中所述,這種方法可以幫助您本地化DevExpress控件的所有內(nèi)置字符串資源。
本主題中描述的方法涉及使用本地化服務(wù)來獲取附屬資源程序集,下載程序集時(shí),找到一個(gè)根據(jù)所需區(qū)域性的縮寫命名的文件夾(例如,他代表希伯來文化),然后將其復(fù)制到應(yīng)用程序可執(zhí)行文件所在的目錄中,不需要編寫任何代碼,因?yàn)閼?yīng)用程序會(huì)自動(dòng)確定當(dāng)前區(qū)域性,并在啟動(dòng)時(shí)加載適當(dāng)?shù)某绦蚣?。下圖顯示了完全翻譯后的消息框。
要測(cè)試控件和其他可視元素(包括XtraMessageBox)如何轉(zhuǎn)換為特定區(qū)域性,可以在應(yīng)用程序啟動(dòng)時(shí)手動(dòng)啟用該區(qū)域性。
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")