VisualBasic Visual Basic 2010 Express: Resourcen einbinden

JanKrohn

Lieutenant
Registriert
Juli 2011
Beiträge
988
Hallo,

ich versuche grad verzweifelt, zwei resx Dateien einzubinden, um meine Anwendung zu lokalisieren. Ich hab also zwei Text-Dateien dem Projekt hinzugefügt: GoBibleBuilder.resx (Default) und GoBibleBuilder.de-DE.resx (für deutsche Anwender), und ein paar Resourcen eingepflegt.

Nun versuche ich, darauf z.B. per My.Resources.GoBibleBuilder.String1 zuzugreifen. Akzeptiert er aber nicht... :-(

Was hab ich denn falsch gemacht?

Gruß,

Jan
 
Eine genaue Fehlermeldung, falls vorhanden, wäre praktisch. Wirft er einen Fehler oder geht er einfach darüber hinweg?

Hab das so in der Weise zwar noch nie selbst gemacht, aber ich meine mich erinnern zu können, dass man das mit dem ResourceManager machen kann.

Ansonsten eventuell mal den entsprechenden Code posten, das is vielleicht aufschlussreicher.
 
Igorrr schrieb:
Eine genaue Fehlermeldung, falls vorhanden, wäre praktisch. Wirft er einen Fehler oder geht er einfach darüber hinweg?

Hab das so in der Weise zwar noch nie selbst gemacht, aber ich meine mich erinnern zu können, dass man das mit dem ResourceManager machen kann.

Ansonsten eventuell mal den entsprechenden Code posten, das is vielleicht aufschlussreicher.

Der Code ist recht simpel:

Code:
Dim Rs As My.Resources.GoBibleBuilder

Es kommt dann die Fehlermeldung:

Fehler 1 Der Typ "My.Resources.GoBibleBuilder" ist nicht definiert. C:\Users\Jan Krohn\Documents\Visual Studio 2010\Projects\Go Bible Builder\Go Bible Builder\Form1.vb 12 19 Go Bible Builder


Der Code stammt aus diesem Buch:

http://books.google.de/books?id=jcF...Resources."&hl=de&pg=PA598#v=onepage&q&f=true

Ich vermute, es könnte in der 2005er-Edition noch funktioniert haben, in 2010 aber nicht mehr... Notfalls mach ich halt eine hart-kodierte Lokalisierung...

Jan
 
Lokalisierungen gehen am einfachsten so:
Du legst eine Ressource-Datei an, z.B. Dictionary.resx. In dieser werden alle Strings für die Grundsprache (z.B. Englisch) gespeichert. Nehmen wir einmal an, der Datei enhält nur einen String mit der Bezeichnung "meineMeldung".
Dann Kopierst du diese Ressource-Datei und nennst die neue nun Dictionary.de.resx. Dort übersetzt du alle Strings (hier nur den "meineMeldung"-String) ins deutsche.

Um das ganze im Code einzubinden kommt folgendes:

Lege einen ResourceManager an mit:
Code:
Dim LocRM As New System.Resources.ResourceManager("<Namespace>.Dictionary", GetType(<Namespace>.Main).Assembly)
wobei <Namespace> mit dem Namespace deiner Applikation zu ersetzen ist (standardmäßig der Projektname).
An den Stellen, wo du nun die Inhalte anzeigen willst verwendest du für den o.g. String:
Code:
LocRM.GetString("meineMeldung")
Jetzt muss man nur noch wissen, wie man eine Sprache setzt. Dies geht über die Culture der Anwendung. Das ist etwas tricky, denn diese kann nur vor dem Start der Anwendung gesetzt werden, damit sie gültig wird. Dies kann etwa im Konstruktor deiner Hauptform passieren, z.B. für deutsch:
Code:
Public Sub New()
Try
  System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo("de")
Catch ex As Exception
  'OS default'
 End Try
 InitializeComponent()
 End Sub

In der praxis bedeutet das: Gesetzte Sprache in Datei speichern, bei Start auslesen und setzen. Bei Sprachwechsel einen Programmneustart über Application.restart() ausführen
 
Zuletzt bearbeitet:
Zurück
Oben