问题:使用VS2005进行C#全球化

时间:2008-12-29 13:46:27

标签: c#

我想全球化我的应用程序。 我创建了一个小表单,询问用户他们的语言。 我有很多问题:

问题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的模板?

先谢谢。

2 个答案:

答案 0 :(得分:1)

要阻止表单关闭,请使用.ShowDialog()上的LangForm。然后,我会在此表单之间设置文化(Thread.CurrentThread.CurrentCultureThread.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;