如何在VB.NET中点击按钮切换表单的语言?

时间:2013-01-20 16:33:53

标签: vb.net visual-studio-2010 localization

我想创建本地化的应用程序,并希望实现语言切换器(例如特殊按钮)。我使用Visual Studio 2010 express(VB.NET)。

我用一个标签和一个按钮创建了简单的测试应用程序。我将表单的属性“Localizable”设置为“True”,并以2种语言编辑组件的文本(默认为英语和俄语)。

我知道需要添加

Imports System.Threading.Thread
Imports System.Globalization

在Form1.vb的开头然后使用

Thread.CurrentThread.CurrentUICulture = New CultureInfo("ru")

启用俄语本地化。 但是,如果我把这一行放入Button_Click事件,它不会改变语言。是否可以在按钮点击或组合框更改等事件之间切换语言?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

是的,您可以在Button Click事件或更改事件上实现本地化。您可以将文化设置为

Thread.CurrentThread.CurrentUICulture = New CultureInfo("ru-RU")

这些链接可以为您提供帮助:Globalizing and Localizing Windows ApplicationWalkthrough: Localizing Windows FormsLocalizing Applications

答案 1 :(得分:0)

这是一个可能的解决方法:https://social.msdn.microsoft.com/Forums/en-US/72f70870-0c0c-4eb1-886b-9db9917d080a/form-support-multilanguage-at-runtime-in-windows-based-application#8c775cc0-5e5e-4551-b5d1-52bb5c1663e8

首先更改CurrentUICulture,然后强制将新文化的资源应用于所有控件。

此代码示例循环遍历Me.Controls,但您也应循环子容器(面板等)。

这样做会改变字符串,位置,大小等。

        System.Threading.Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-ES")
        Dim res As ComponentResourceManager = New ComponentResourceManager(Me.GetType)
        For Each aControl As Control In Me.Controls
            res.ApplyResources(aControl, aControl.Name)
        Next

EDITED:您还可以使用以下方法更改线程的默认文化:

CultureInfo.DefaultThreadCurrentCulture = New CultureInfo("es-ES")

这样做,您在运行时创建的所有新表单都将使用这个新的CultureInfo。