Мы хотели бы перечислить все строки в файле ресурсов в .NET (файл resx). Мы хотим, чтобы это создало объект javascript, содержащий все эти пары ключ-значение. Мы делаем это сейчас для спутниковых устройств с кодом, как это (это VB.NET, но любой пример кода штраф):Перечисление всех строк в resx
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?
UPDATE:
После комментария Денниса Myren и идеи из here, я построил 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
Будет ли он автоматически выбирать нужный файл на основе языка (например, ResourceManager) или мне нужно написать собственную логику для поиска нужного файла? – 2008-11-11 11:58:01