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

标签 .net javascript localization internationalization resx

我们想枚举 .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 的评论和来自 here 的想法,我构建了一个 ResXResourceManager。现在我可以像处理嵌入式资源一样处理 .resx 文件。这是代码。请注意,Microsoft 将所需的构造函数设为私有(private),因此我使用反射来访问它。使用它时您需要完全信任。

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

最佳答案

使用System.Resources.ResXResourceReader (它在 System.Windows.Forms.dll 中)

关于.net - 枚举 resx 中的所有字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/278249/

相关文章:

php - 什么是更好的网站本地化方法?

c# - 我应该为 .NET 中的新 OSS 项目使用什么许可证

javascript - 部署 Node JS 后,图像(PNG、JPG)不会显示在 Heroku 应用程序上

javascript - ngAnimate 与 ui-view

asp.net-mvc - ASP.NET 自定义本地化

google-maps - 从 google map api v3 获取英文地址

c# - 如何检测应用程序何时终止?

C# using关键字,正确使用

.net - 有哪些适用于 .Net 的快速报告解决方案?

javascript - z-index 较大的 div 位于 z-index 较小的 div 下方