【VB.NET】获取当前系统的所有本地语言信息
.NET 可以轻松获取当前系统的语言信息,当你想做一个支持多语言的程序时,可以通过
但是某些语言可能并不只有当地可以使用,就比如港澳台都使用繁体中文,而大陆和新加坡使用的是简体中文,美式英语和英式英语虽有部分区别、但大部分单词都是相同的。如果为每一个不同地区的人都准备不同的语言资源包,不仅繁琐而且浪费。
其实 .NET 的
因此,我写了一个可追溯当前系统语言的静态方法,可以帮助你直接枚举出当前语言的所有语言描述文本,可以让你更好地重用语言包资源。
比如你准备给简体中文和繁体中文各应用不同的资源包,那么就可以将简中资源包命名为
甚至,如果你更懒,只准备提供一个中文语言包,你就可以直接命名为
又或者,你的程序语言搜寻过程更智能的话,也可以直接通过检测是否有指定的语言包文件,如果不存在就向上搜寻父语言包文件的方式,来提供不同精度的差异化语言包。
获取语言信息的代码:
CultureInfo
的数据来加载不同的资源文件,用以支持国际化。但是某些语言可能并不只有当地可以使用,就比如港澳台都使用繁体中文,而大陆和新加坡使用的是简体中文,美式英语和英式英语虽有部分区别、但大部分单词都是相同的。如果为每一个不同地区的人都准备不同的语言资源包,不仅繁琐而且浪费。
其实 .NET 的
CultureInfo
是具有继承关系的,比如 en-US
和 en-UK
都是继承自 en
;而简体中文 zh-CN
与 zh-SG
则继承自 zh-CHS
,繁体中文 zh-TW
、zh-HK
、zh-MO
都是继承自 zh-CHT
,而且它们最底层都是继承自 zh
!因此,我写了一个可追溯当前系统语言的静态方法,可以帮助你直接枚举出当前语言的所有语言描述文本,可以让你更好地重用语言包资源。
比如你准备给简体中文和繁体中文各应用不同的资源包,那么就可以将简中资源包命名为
zh-CHS.lang
,而繁中资源包命名为 zh-CHT.lang
。甚至,如果你更懒,只准备提供一个中文语言包,你就可以直接命名为
zh.lang
,英文资源也可以直接使用 en.lang
。又或者,你的程序语言搜寻过程更智能的话,也可以直接通过检测是否有指定的语言包文件,如果不存在就向上搜寻父语言包文件的方式,来提供不同精度的差异化语言包。
获取语言信息的代码:
Shared Function getLangInfo(Optional ByVal langName As String = Nothing) As String()
Dim cinfo As Globalization.CultureInfo
If langName = Nothing Then
cinfo = Globalization.CultureInfo.InstalledUICulture
Else
Try
'cinfo = Globalization.CultureInfo.GetCultureInfoByIetfLanguageTag(langName)
cinfo = New Globalization.CultureInfo(langName)
Catch ex As Exception
Return Nothing
End Try
End If
If cinfo Is Globalization.CultureInfo.InvariantCulture Then
Return Nothing
End If
Dim slist As New List(Of String)
Do
slist.Add(cinfo.Name)
cinfo = cinfo.Parent
Loop Until cinfo Is Globalization.CultureInfo.InvariantCulture
Return slist.ToArray
End Function
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。