首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行时的本地化

运行时的本地化
EN

Stack Overflow用户
提问于 2011-08-08 18:37:13
回答 4查看 12.1K关注 0票数 5

我已经用C#创建了Windows Form程序。我对本地化有一些问题。我有3种语言的资源文件。我想单击每个语言按钮并在运行时更改语言。当我在InitializeComponent()之前改变语言时,它起作用了。但是当我点击按钮时,它不起作用。我正在使用这个代码。

代码语言:javascript
复制
private void RussianFlag_Click(object sender, EventArgs e)
{
    Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU");
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-08 19:03:55

您将需要重新加载控件以反映新区域性值

代码语言:javascript
复制
ComponentResourceManager resources = new ComponentResourceManager(typeof(Form1));

然后,您必须使用resources.ApplyResources为每个控件申请

请使用look here

票数 4
EN

Stack Overflow用户

发布于 2012-05-01 03:53:38

我编写了一个具有以下特性的RuntimeLocalizer类:

  • 更改和更新表单中所有ControlSubControl的本地化
  • 还更改所有MenuStrips

的所有SubItem的本地化

使用示例:RuntimeLocalizer.ChangeCulture(MainForm, "en-US");

代码语言:javascript
复制
using System.Windows.Forms;
using System.Globalization;
using System.Threading;
using System.ComponentModel;

代码语言:javascript
复制
public static class RuntimeLocalizer
{
    public static void ChangeCulture(Form frm, string cultureCode)
    {
        CultureInfo culture = CultureInfo.GetCultureInfo(cultureCode);

        Thread.CurrentThread.CurrentUICulture = culture;

        ComponentResourceManager resources = new ComponentResourceManager(frm.GetType());

        ApplyResourceToControl(resources, frm, culture);
        resources.ApplyResources(frm, "$this", culture);
    }

    private static void ApplyResourceToControl(ComponentResourceManager res, Control control, CultureInfo lang)
    {
        if (control.GetType() == typeof(MenuStrip))  // See if this is a menuStrip
        {
            MenuStrip strip = (MenuStrip)control;

            ApplyResourceToToolStripItemCollection(strip.Items, res, lang);
        }

        foreach (Control c in control.Controls) // Apply to all sub-controls
        {
            ApplyResourceToControl(res, c, lang);
            res.ApplyResources(c, c.Name, lang);
        }

        // Apply to self
        res.ApplyResources(control, control.Name, lang);
    }

    private static void ApplyResourceToToolStripItemCollection(ToolStripItemCollection col, ComponentResourceManager res, CultureInfo lang)
    {
        for (int i = 0; i < col.Count; i++)     // Apply to all sub items
        {
            ToolStripItem item = (ToolStripMenuItem)col[i];

            if (item.GetType() == typeof(ToolStripMenuItem))
            {
                ToolStripMenuItem menuitem = (ToolStripMenuItem)item;
                ApplyResourceToToolStripItemCollection(menuitem.DropDownItems, res, lang);
            }

            res.ApplyResources(item, item.Name, lang);
        }
    }
}
票数 14
EN

Stack Overflow用户

发布于 2011-08-08 18:55:43

更改CurrentUICulture不会自动重新加载资源。您需要手动执行(http://msdn.microsoft.com/en-us/magazine/cc163609.aspx#S8)

您可以将与本地化相关的代码从InitializeComponent()复制到另一个函数:

代码语言:javascript
复制
void LoadResources(){

    this.Title = MyApp.Resources.MainFormCaption;
    this.lblWelcomeMessage.Text = MyApp.Resources.UserWelcome;

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6980888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档