none
Lokalisierung über eigene Klasse funktioniert nicht RRS feed

  • Frage

  • Hallo

    Ich versuche mich gerade dem Thema Lokalisierung etwas genauer zu widmen.

    Leider bekomme ich immer folgenden Fehler:

    Zusätzliche Informationen: Für die angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden. Stellen Sie sicher, dass Customer.resources beim Kompilieren richtig in die Assembly Localize eingebettet wurde, oder dass die erforderlichen Satellitenassemblys geladen werden können und vollständig signiert sind.

    Ich habe in VS ein neues Klassenprojekt erstellt.

    Darin habe ich einen Ordner erstellt Resources.
    Darin eine Resx Datei mit dem Namen: Customer.de-AT.resx

    Dort habe ich dann einige Eigenschaften vergeben - Buildvorgang steht auf "Eingebettete Resource" Default Namespace ist leer.

    Dann habe ich eine Klasse geschrieben, die im Moment "nur" Deutsch (Österreich) verarbeiten kann:

    Public Class Localization
        Friend Shared Property myResourceCulture As String = "de-AT"
        Private Shared myCustomerResourceManager = New ResourceManager("Customer", GetType(Localization).Assembly)
    
        Public Shared Sub SetLanguage(Language As Languages)
            SetCulture(Language)
        End Sub
        Public Shared Sub SetLanguage(Language As String)
            If Language = "de-AT" Then
                SetCulture(Languages.Österreich)
            Else
                SetCulture(Languages.Österreich)
            End If
        End Sub
        Private Shared Function TranslateLanguageToCulture(setLanguage As Languages) As String
            If setLanguage = Languages.Österreich Then
                myResourceCulture = "de-AT"
            End If
            Return myResourceCulture
        End Function
        Private Shared Sub SetCulture(setLanguage As Languages)
            Dim locCultureInformation As New CultureInfo(TranslateLanguageToCulture(setLanguage))
            Thread.CurrentThread.CurrentCulture = locCultureInformation
            Thread.CurrentThread.CurrentUICulture = locCultureInformation
        End Sub
        Friend Shared ReadOnly Property GetCustomerResourceManager As ResourceManager
            Get
                SetLanguage(myResourceCulture)
                Return myCustomerResourceManager
            End Get
        End Property
    
    
    
    End Class

    So und dann habe ich noch eine Klasse, über die die Strings abgerufen werden sollen:

    Namespace Customer
        Public Class GetCustomer
            Public Shared ReadOnly Property GetHeader As String
                Get
                    Return Localization.GetCustomerResourceManager.GetString("Header", New System.Globalization.CultureInfo(Localization.myResourceCulture))
                End Get
            End Property
        End Class
    End Namespace

    Der Code läuft soweit durch, bis auf die Eigenschaft von GetHeader trifft. - > Dort bekomme ich dann obenstehenden Fehler präsentiert.

    Kann mir jemand zu diesem Thema helfen!?

    DANKE im Voraus

    Freitag, 1. Mai 2015 11:47

Antworten

  • Hallo Zero-G.,

    was mir jetzt gerade erst Auffält, ist das bei Satteliten Assemblys erstellet werden. Wenn du eine Resource mit *.de-AT.resx gemacht hast wird die in eine Satteliten Assembly gespeichert. Also müsste wenn dein Buildvorgang nicht abgeändert ist neben deiner *.dll ein Ordner de-AT existieren und darin müsste wieder eine dll sein, die die resourcen erhält. Dafür .NET dieses auch findet, meine ich müsste man Angeben, dass diese Sprache, in einer Satteliten Assembly liegt.

    <Assembly: NeutralResourcesLanguageAttribute("de-AT", Resources.UltimateResourceFallbackLocation.Satellite)>

    MfG

    d-l-d-l

    • Als Antwort markiert Zero-G. _ Sonntag, 3. Mai 2015 08:09
    Samstag, 2. Mai 2015 07:02

Alle Antworten

  • Hallo,

    wenn ich die Fehlermeldung richtig interpretiere, dann kann er die Resourcen nicht laden. Kann es sein, dass in der AssemblyInfo.cs das Attribute
    [assembly: NeutralResourcesLanguageAttribute("en")] nicht auf de-AT stehen hast?

    MfG

    d-l-d-l

    Freitag, 1. Mai 2015 13:13
  • Hallo d-I-d-l

    Danke für Deine Antwort, aber leider nein... -> Die Default Language ist auf de-AT gesetzt.

    Ich kann mich erinnern, dass man die Satteliten Assemblys auch in der app.config registriert werden sollte.

    Da ich aber ein Klassenprojekt habe, existiert keine app.config Datei.

    Hoffe es gibt noch mehr Tips dazu

    DANKE

    Samstag, 2. Mai 2015 06:42
  • Hallo Zero-G.,

    was mir jetzt gerade erst Auffält, ist das bei Satteliten Assemblys erstellet werden. Wenn du eine Resource mit *.de-AT.resx gemacht hast wird die in eine Satteliten Assembly gespeichert. Also müsste wenn dein Buildvorgang nicht abgeändert ist neben deiner *.dll ein Ordner de-AT existieren und darin müsste wieder eine dll sein, die die resourcen erhält. Dafür .NET dieses auch findet, meine ich müsste man Angeben, dass diese Sprache, in einer Satteliten Assembly liegt.

    <Assembly: NeutralResourcesLanguageAttribute("de-AT", Resources.UltimateResourceFallbackLocation.Satellite)>

    MfG

    d-l-d-l

    • Als Antwort markiert Zero-G. _ Sonntag, 3. Mai 2015 08:09
    Samstag, 2. Mai 2015 07:02
  • Hallo

    Also: Pfad existiert & auch die dll.-> Erstellung sollte also korrekt gelaufen sein.

    Ich werde am Nachmittag mal probieren, die Angabe zu machen.

    DANKE

    Samstag, 2. Mai 2015 07:22
  • Hallo!

    DANKE!

    Bei mir stand lediglich:

    <Assembly: NeutralResourcesLanguageAttribute("de-AT")>

    Nach dem ich auch noch UltimateResourceFallbackLocation dazu geschrieben habe, funktionierte es auf Anhieb!

    DANKE noch mals! 


    Sonntag, 3. Mai 2015 08:09