Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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 正在枚举resx中的所有字符串_.net_Javascript_Localization_Internationalization_Resx - Fatal编程技术网

.net 正在枚举resx中的所有字符串

.net 正在枚举resx中的所有字符串,.net,javascript,localization,internationalization,resx,.net,Javascript,Localization,Internationalization,Resx,我们希望枚举.NET中资源文件(resx文件)中的所有字符串。我们希望它生成一个包含所有这些键值对的javascript对象。现在,我们使用以下代码对附属程序集执行此操作(这是VB.NET,但任何示例代码都可以): 然而,遗憾的是,我们还没有找到一种方法来处理.resx文件。如何枚举resx文件中的所有本地化字符串 更新: 根据Dennis Myren的评论和来自的想法,我构建了一个ResXResourceManager。现在,我可以对.resx文件执行与嵌入资源相同的操作。这是代码。请注意,M

我们希望枚举.NET中资源文件(resx文件)中的所有字符串。我们希望它生成一个包含所有这些键值对的javascript对象。现在,我们使用以下代码对附属程序集执行此操作(这是VB.NET,但任何示例代码都可以):

然而,遗憾的是,我们还没有找到一种方法来处理.resx文件。如何枚举resx文件中的所有本地化字符串

更新:

根据Dennis Myren的评论和来自的想法,我构建了一个ResXResourceManager。现在,我可以对.resx文件执行与嵌入资源相同的操作。这是代码。请注意,Microsoft将所需的构造函数设置为私有,因此我使用反射来访问它。使用此功能时需要完全信任

Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Windows.Forms

Public Class ResXResourceManager
    Inherits ResourceManager

    Public Sub New(ByVal BaseName As String, ByVal ResourceDir As String)
        Me.New(BaseName, ResourceDir, GetType(ResXResourceSet))
    End Sub

    Protected Sub New(ByVal BaseName As String, ByVal ResourceDir As String, ByVal UsingResourceSet As Type)
        Dim BaseType As Type = Me.GetType().BaseType
        Dim Flags As BindingFlags = BindingFlags.NonPublic Or BindingFlags.Instance
        Dim Constructor As ConstructorInfo = BaseType.GetConstructor(Flags, Nothing, New Type() { GetType(String), GetType(String), GetType(Type) }, Nothing)
        Constructor.Invoke(Me, Flags, Nothing, New Object() { BaseName, ResourceDir, UsingResourceSet }, Nothing)
    End Sub

    Protected Overrides Function GetResourceFileName(ByVal culture As CultureInfo) As String
        Dim FileName As String
        FileName = MyBase.GetResourceFileName(culture)
        If FileName IsNot Nothing AndAlso FileName.Length > 10 Then
            Return FileName.Substring(0, FileName.Length - 10) & ".resx"
        End If
        Return Nothing
    End Function
End Class

Use(在System.Windows.Forms.dll中)

有一个替代解决方案,它涉及将属性放在枚举上,以允许从资源文件读取字符串。这使用了另一种自定义工具。

它会根据区域设置自动选择正确的文件(如ResourceManager),还是必须编写自己的逻辑才能找到正确的文件?ResXResourceReader与其说是资源管理器,不如说是一个低级的.resx XML文件解析器。也许可以直接使用System.Web.Compilation.ResourceExpressionBuilder,但我还没有尝试过。您可能需要ResourceManager.CreateFileBasedResourceManager之类的内容,但对于.resx文件。。
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Windows.Forms

Public Class ResXResourceManager
    Inherits ResourceManager

    Public Sub New(ByVal BaseName As String, ByVal ResourceDir As String)
        Me.New(BaseName, ResourceDir, GetType(ResXResourceSet))
    End Sub

    Protected Sub New(ByVal BaseName As String, ByVal ResourceDir As String, ByVal UsingResourceSet As Type)
        Dim BaseType As Type = Me.GetType().BaseType
        Dim Flags As BindingFlags = BindingFlags.NonPublic Or BindingFlags.Instance
        Dim Constructor As ConstructorInfo = BaseType.GetConstructor(Flags, Nothing, New Type() { GetType(String), GetType(String), GetType(Type) }, Nothing)
        Constructor.Invoke(Me, Flags, Nothing, New Object() { BaseName, ResourceDir, UsingResourceSet }, Nothing)
    End Sub

    Protected Overrides Function GetResourceFileName(ByVal culture As CultureInfo) As String
        Dim FileName As String
        FileName = MyBase.GetResourceFileName(culture)
        If FileName IsNot Nothing AndAlso FileName.Length > 10 Then
            Return FileName.Substring(0, FileName.Length - 10) & ".resx"
        End If
        Return Nothing
    End Function
End Class