我想全球化我的应用程序。 我创建了一个小表单,询问用户他们的语言。 我有很多问题:
问题1:
在program.cs中
new SplashScreen(_tempAL);
new LangForm(_lang);
Application.Run(new Form1(_tempAL, _lang));
我希望应用程序在用户单击LangForm中的OK之前不要调用Form1。 有关LangForm的更多解释:
public LangForm(char _langChar)
{
InitializeComponent();
_ch = _langChar;
this.TopMost = true;
this.Show();
}
private void _btnOk_Click(object sender, EventArgs e)
{
string _langStr = _cbLang.SelectedText;
switch (_langStr)
{
case "English":
_ch = 'E';
this.Hide();
break;
case "Arabic":
_ch = 'A';
this.Hide();
break;
case "Frensh":
_ch ='F';
this.Hide();
break;
}
_pressedOk = true;
}
private void _btnCancel_Click(object sender, EventArgs e)
{
this.Close();
Application.Exit();
}
现在,当我调试时,应用程序调用LangForm,然后调用Form1,以便显示两个表单。 我希望Form1等到用户点击LangForm中的Ok。
问题2:
我应该什么时候查看语言?不允许签入“initializeComponent()” 所以我应该在这个功能之后检查,然后根据语言设置控制位置。
问题3:
在应用程序进程中,我在每个“MessageBox.Show(”“);”之前显示一些消息。我应该检查语言,或者我可以用另一种方式设置语言。
问题4:
我搜索了MessageBox的接口,实际上我想要更改它的布局。如何找到MessageBox的模板?
先谢谢。
答案 0 :(得分:1)
要阻止表单关闭,请使用.ShowDialog()
上的LangForm
。然后,我会在此表单之间设置文化(Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.CurrentUICulture
),然后创建新表单。完成此操作后,resx中的任何内容都应正确加载。
要更改MsgBox
的布局(超出常规),您必须自己编写(它不支持此功能)。
类似的东西:
[STAThread]
static void Main() {
Application.EnableVisualStyles();
// find the culture we want to use
bool cont;
string languageCode;
using (LangForm lang = new LangForm()) {
cont = lang.ShowDialog() == DialogResult.OK;
languageCode = lang.LanguageCode; // "en-US", etc
}
if (!cont) return;
// set the culture against the UI thread
Thread.CurrentThread.CurrentCulture =
Thread.CurrentThread.CurrentUICulture =
CultureInfo.GetCultureInfo(languageCode);
// show the main UI
using (MainForm main = new MainForm()) {
Application.Run(main);
}
}
请注意,使用官方文化代码可以更轻松地使用CultureInfo
之类的内容;如果你想使用你自己的短名单,那么使用枚举,并在某处写一个方法:
public static string GetCultureCode(MyCulture culture) {
switch(culture) {
case MyCulture.French: return "fr-FR";
case MyCulture.English: return "en-GB";
//...
default: throw new NotSupportedException("Unexpected culture: " + culture);
}
}
答案 1 :(得分:1)
将语言选择表单显示为对话框。使Program.cs文件看起来像这样:
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
if (DialogResult.OK == new LangForm().ShowDialog()) {
Application.Run(new Form1());
}
}
将此行添加到_btnOK点击处理程序:
this.DialogResult = DialogResult.OK;