Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何根据组合框所选项目从不同的资源文件加载字符串?_.net_Vb.net_Visual Studio - Fatal编程技术网

.net 如何根据组合框所选项目从不同的资源文件加载字符串?

.net 如何根据组合框所选项目从不同的资源文件加载字符串?,.net,vb.net,visual-studio,.net,Vb.net,Visual Studio,我有一个改变显示语言的表单。我想根据字符串变量从不同的资源文件加载字符串,如下所示: Public Class frm_Main Dim language As String = "" Private Sub cb_lang_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cb_lang.SelectedIndexChanged language = cb_lang.Selected

我有一个改变显示语言的表单。我想根据字符串变量从不同的资源文件加载字符串,如下所示:

Public Class frm_Main

    Dim language As String = ""

    Private Sub cb_lang_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cb_lang.SelectedIndexChanged
        language = cb_lang.SelectedText
        lbl_Country.Text = My.Resources.english.country ' Replace "english" with language value
        lbl_Language.Text = My.Resources.english.language ' Same
    End Sub

End Class
cb_lang包含“英语”和“西班牙语”。 有两个文件,“english.resx”和“西班牙语.resx”

我该怎么做

有两个文件,“english.resx”和“西班牙语.resx”

首先,对于默认区域性,将这两个文件重命名为
MyProject.resx
,对于翻译版本,将其重命名为
MyProject.es.resx
MyProject.en.resx

资源设计器文件是XML,但当您编译(或在其上“运行自定义工具”)时,它会创建/更新一个实际的资源类,这就是您在代码中访问的对象

该对象有一个
CultureInfo
属性,您可以将其设置为所需的任何
CultureInfo
;根据区域性代码正确命名资源文件后,框架将使用该代码确定从哪个资源文件获取资源键值

因此,您需要做的就是将下拉列表值映射到实例

My.Resources.MyProject.Culture = SomeCultureDictionary(cb_lang.SelectedText)
lbl_Country.Text = My.Resources.MyProject.Country
lbl_Language.Text = My.Resources.MyProject.Language

让框架来完成这项艰巨的工作。将您的资源命名为
Foobar.resx
默认值,将
Foobar.en.resx
命名为英语,将
Foobar.en UK.resx
命名为Foobar.en UK.resx如果您需要“颜色”和“盔甲”看起来像是打字错误,请将
Foobar.fr.resx
命名为法语翻译,等等。然后您只需根据需要设置资源的
文化(您需要从所选字符串创建一个
CultureInfo
实例),然后重新分配
.Text
值。您根本不需要从资源中获取特定的语言—框架会为您完成这项工作。