枚举resx中的所有字符串

5
我们希望能够枚举 .NET 中资源文件(resx 文件)中的所有字符串。我们希望生成一个包含所有这些键值对的 JavaScript 对象。我们现在使用类似以下代码(这是 VB.NET,但任何示例代码都可以)来处理卫星程序集:
Dim rm As ResourceManager
rm = New ResourceManager([resource name], [your assembly])
Dim Rs As ResourceSet
Rs = rm.GetResourceSet(Thread.CurrentThread.CurrentCulture, True, True)
For Each Kvp As DictionaryEntry In Rs
    [Write out Kvp.Key and Kvp.Value]
Next

然而,我们还没有找到一种方法来处理.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
2个回答

4

这会自动根据区域设置选择正确的文件(就像 ResourceManager 那样),还是我需要编写自己的逻辑来找到正确的文件呢? - Erik Hesselink
ResXResourceReader更像是一个低级别的.resx XML文件解析器,而不是资源管理器。也许可以直接使用System.Web.Compilation.ResourceExpressionBuilder,但我还没有尝试过。你需要类似于ResourceManager.CreateFileBasedResourceManager的东西,但是针对.resx文件。 - baretta

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接