同一个exe,不同电脑上执行,设置 CurrentUICulture的结果却不同

JERRY_LIU 2019-10-10 05:14:17
设置软件的多国语言界面,在开发电脑上测试OK,en时显示英文,zh-cn时显示中文简体

但是把Exe复制到客户机上,设置zh-cn还是显示英文,用System.Threading.Thread.CurrentThread.CurrentUICulture获取当前值,也是zh-cn,就是界面文字还是英文。

这是什么情况?
代码如下,form load:

Private Sub FrmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim strDefuLang As String
strDefuLang = System.Configuration.ConfigurationManager.AppSettings("Language").ToString
LoadLanguage(Me, strDefuLang)

Dim uiCulture As CultureInfo = System.Threading.Thread.CurrentThread.CurrentUICulture
MsgBox("name:" + uiCulture.Name + " , display name:" + uiCulture.DisplayName)


End Sub


loadLanguage:

Public Sub LoadLanguage(ByVal aForm As Form, ByVal vLang As String)
If Not aForm Is Nothing Then
System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(vLang)
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(aForm.GetType())
resources.ApplyResources(aForm, "$this")
LoadingControls(aForm, resources)
End If

End Sub

Private Shared Sub LoadingControls(ByVal aControl As Control, ByVal aResources As System.ComponentModel.ComponentResourceManager)
If TypeOf aControl Is MenuStrip Then
'将资源与控件对应
aResources.ApplyResources(aControl, aControl.Name)
Dim menu As MenuStrip = CType(aControl, MenuStrip)
If menu.Items.Count > 0 Then
Dim item As ToolStripMenuItem
For Each item In menu.Items
'遍历菜单
Loading(item, aResources)
Next
End If
End If

Dim ctrl As Control
For Each ctrl In aControl.Controls
aResources.ApplyResources(ctrl, ctrl.Name)
LoadingControls(ctrl, aResources)
Next
End Sub


Private Shared Sub Loading(ByVal aItem As ToolStripMenuItem, ByVal aResources As System.ComponentModel.ComponentResourceManager)
If TypeOf aItem Is ToolStripMenuItem Then
aResources.ApplyResources(aItem, aItem.Name)
If aItem.DropDownItems.Count > 0 Then
Dim item As ToolStripMenuItem
For Each item In aItem.DropDownItems
Loading(item, aResources)
Next
End If
End If
End Sub
...全文
298 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
JERRY_LIU 2019-10-24
  • 打赏
  • 举报
回复
已经找到原因了,开发机上设置多国语言后,会生成很多语言包的子文件夹,复制EXE去客户机时,只复制了EXE,漏了这些语言包的子文件夹,所以在客户机上运行EXE时,找不到对应的语言包,系统默认只能显示英文。

感谢楼上各位,结帖。
JERRY_LIU 2019-10-22
  • 打赏
  • 举报
回复
多谢大侠指点,不过我没用这么高版本的vs,我也知道是哪一句执行未生效

System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(vLang)

Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(aForm.GetType())
resources.ApplyResources(aForm, "$this")

问题 是不知道为什么没有生效,要搞懂这个原因,远程调试帮不上什么忙。
  • 打赏
  • 举报
回复
引用 7 楼 JERRY_LIU 的回复:
打断点只能在本机上测试,我在本机执行正常 但是编译成Exe后放客户机上执行结果不对了。 我加了msgbox显示当前获取的值,值没有错,就是设置CurrentUICulture 没有生效
谁告诉你客户机就不能调试了? https://www.cnblogs.com/DragonStart/p/8241895.html
JERRY_LIU 2019-10-21
  • 打赏
  • 举报
回复
真的是没有人懂这个问题啊
JERRY_LIU 2019-10-15
  • 打赏
  • 举报
回复
打断点只能在本机上测试,我在本机执行正常

但是编译成Exe后放客户机上执行结果不对了。

我加了msgbox显示当前获取的值,值没有错,就是设置CurrentUICulture 没有生效
  • 打赏
  • 举报
回复
太乱了不想看,自己打个断点跟一下看看情况不可以吗?
JERRY_LIU 2019-10-15
  • 打赏
  • 举报
回复
看来真的没人能帮到我了啊
JERRY_LIU 2019-10-14
  • 打赏
  • 举报
回复

也是,不过那边人更少,语法差别不大,我想着这边人多点,高手多一些。
雪狼孤竹 2019-10-14
  • 打赏
  • 举报
回复
这块是C# ,应该发到VB.net。
JERRY_LIU 2019-10-14
  • 打赏
  • 举报
回复
是没人,还是太难了?
JERRY_LIU 2019-10-11
  • 打赏
  • 举报
回复
顶起来,没人看?

16,552

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧