Laden...

Erkennen welche Lokalisierungen vorhanden sind

Erstellt von Mossi vor 14 Jahren Letzter Beitrag vor 13 Jahren 1.740 Views
Mossi Themenstarter:in
199 Beiträge seit 2006
vor 14 Jahren
Erkennen welche Lokalisierungen vorhanden sind

Hallo,

gibt es eine Möglichkeit zu erkennen, welche Lokalisierungen in einer Anwendung vorhanden sind? Grundsätzlich kann man ja auf die Resource-Verzeichnisse gehen, da für jede Übersetzung im Output-Folder ja ein entsrpechendes Unterverzeichnis mit der Sprache angelegt wird. Allerdings weiß man dann immer noch nicht, was die Defaultsprache ist/war. Kann man das irgendwie aus der Assembly auslesen?

Hintergrund ist, dass ich ein DropDown-Control zur Sprachauswahl bastle. Das Control soll möglichst unabhängig arbeiten und von selbst erkennen, was alles angezeigt werden soll. Bis jetzt parse ich eben das Directory und füge die Resource-Subdirectories entsprechend hinzu. Zusätzlich hab ich jetzt noch fest drin, dass immer auch noch Deutsch hinzugefügt wird, da das bei mir in der Regel die Standardsprache ist. Das ist aber ziemlich unflexibel, da man eben nicht immer deutsch als Standard-Sprache verwendet.

Gibt es dafür eine Lösung?

T
193 Beiträge seit 2006
vor 14 Jahren

ich glaube folgendes sollte dir helfen:

using System.Threading;

Thread.CurrentThread.CurrentCulture.Name == "en-US"

torti

Gelöschter Account
vor 14 Jahren

@torti:
mir fällt beim besten willen nciht ein wie das helfen sollte. das sieht mir eher nach themaverfehlung aus?

@Mossi:
es kommt immer darauf an, wie lokalisiert wird. wenn man das frameworkinterne mithilfe des ressourcemanagers nutzt, ists noch recht einfach:
mit "GetNeutralResourcesLanguage" bekommst du die fallback-kultur. also die defaultsprache.

wie du die bereits vorhandenen sprachen bekommst kann ich dir jedoch nicht sagen.

weiterhin gilt: wenn dieser weg nciht genutzt wird, hast du kaum chancen.

Mossi Themenstarter:in
199 Beiträge seit 2006
vor 14 Jahren

Danke,

GetNeutralResourcesLanguage wär genau das richtige, wie ich in der Doku gesehen habe. Allerdings darf ich darauf nicht zugreifen. Die Methode wird vom Intellisens nicht vorgeschlagen und wenn ich sie dennoch einfach mal so hinschreibe, kommt sofort die Fehlermeldung

Der Zugriff auf "System.Resources.ResourceManager.GetNeutralResourcesLanguage(System.Reflection.Assembly)" ist aufgrund der Sicherheitsebene nicht möglich.

jetzt müsste man sich eben wieder mit dem Security-Concept auskennen. bisher bin ich noch nie auf so ein problem gestoßen grml

EDIT: Interessanterweise kann man die Function aber im Quickwatch aufrufen. Nachdem ich das AssemblyAttribute NeutralResourcesLanguage gesetzt habe, wird dann auch das richtige angezeigt. Hilft mir aber eben nichts, da ich den Quellcode nicht damit kompilieren kann.

Gelöschter Account
vor 14 Jahren

das hat ncihts mit dem securitykonzept zu tun, sondern mit den zugriffsmodifizierern (private public usw..)

Mossi Themenstarter:in
199 Beiträge seit 2006
vor 14 Jahren

ok. ich hab's jetzt so gelöst, dass ich per Reflection die Attribute der Assembly abfrage


public static CultureInfo GetNeutralCultureInfo()
{
    if (_defaultCulture != null)
        return _defaultCulture;

    object[] attributes = Assembly.GetEntryAssembly().GetCustomAttributes(typeof(NeutralResourcesLanguageAttribute), false);
    if (attributes.Length != 1)
        _defaultCulture = CultureInfo.GetCultureInfo("de-DE");
    else
        _defaultCulture = CultureInfo.GetCultureInfo(((NeutralResourcesLanguageAttribute)attributes[0]).CultureName);

    return _defaultCulture;
}

In den Assembly-Einstellungen muss man dann eben die entsprechende Sprache setzen. Entweder über die Projekt-Einstellungsseite oder in der AssemblyInfo.cs manuell

[assembly: NeutralResourcesLanguageAttribute("de-DE")]
5.299 Beiträge seit 2008
vor 14 Jahren

ist die default-sprache nicht dieselbe, die auch durch System.Globalization.CultureInfo.CurrentUICulture() As System.Globalization.CultureInfo angegeben ist?

Der frühe Apfel fängt den Wurm.

2.921 Beiträge seit 2005
vor 14 Jahren

@Mossi:

Habs mir nicht genauer angesehen, aber vielleicht hilft das ja weiter:

Alle verfügbaren Kulturen [dotnetsnippets]

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

Mossi Themenstarter:in
199 Beiträge seit 2006
vor 14 Jahren

ist die default-sprache nicht dieselbe, die auch durch System.Globalization.CultureInfo.CurrentUICulture() As System.Globalization.CultureInfo angegeben ist?

Das ist die Default-Sprache des Benutzers, der die Anwendung ausführt. Das heißt, wenn man mit den Amerikanischen Einstellungen die Applikation startet, bekommt man en-US, während man auf deutschen Rechnern de-DE bekommen würde.
Was ich gesucht habe, ist die Default-Resource-Datei sozusagen. Also die Sprache, in der die Anwendung entwickelt wurde.

Gleiches gilt auch für den Snippet von dr4g0n76

Sonst wär's ja zu einfach 😃

Gelöschter Account
vor 13 Jahren

Also die Sprache, in der die Anwendung entwickelt wurde.

warum das? die sollte eine applikation die released sit garnicht interessieren?!? ich kenne sogar projekte, die ihre eigene culture dafür erzeugt haben..

Mossi Themenstarter:in
199 Beiträge seit 2006
vor 13 Jahren

Damit ich eben in einer ComboBox anzeigen kann, welche Lokalisierungen vorhanden sind. Die zusätzlichen Lokalisierungen kann man ganz leicht über die Directories rausbekommen, aber die ursprüngliche Sprache findet man sonst nicht.

5.299 Beiträge seit 2008
vor 13 Jahren

ich denk, entwickelt wird immer in invariant culture, d.h. en-us.
Ich mache das daran fest, dass zB. Datum-Literale wie folgt anzugeben sind:


         var today = 4 / 23 / 2010;

Der frühe Apfel fängt den Wurm.