Multilang-Strings einfach auslesen

Problemstellung

Beim Auslesen einer Eigenschaft in EPlan kommt ein String wie ??_??@Inhalt des Feldes; oder bei übersetzten Feldern eher de_DE@Inhalt des Feldes;en_US@Content of the field; was aber gewünscht war, war nur Inhalt des Feldes. Ursache ist in beiden fällen ein als mehrsprachig markiertes Feld, welches einen Multilang-String aufnehmen, verarbeiten und darstellen kann. Vergleiche mit anderen Strings sind so natürlich schon zum scheitern verurteilt, wenn das nicht berücksichtigt wird.

Problemlösung

Nun gibt es zwei verschiedene Ansätze, die mir direkt in den Sinn kommen:

  • Nach ; splitten, den ersten Teil bei @ splitten und schon ist der zweite Teil das Ergebnis. Das ist allerdings auch immer der hoffentlich deutsche oder allgemeine Teil, gesichert ist das nicht. Nun könnte man noch nach dem ersten Splitt alle Elemente durchsuchen und nach de_DE@ oder ??_??@ (oder eben nach der gewünschten Zielsprache) im Anfang prüfen, aber auch das ist weder schön noch performant
  • Suchen mit regulären Ausdrücken direkt nach dem richtigen Ausdruck in der passenden Sprache mit Fallback-Lösung

Das ganze hört sich auch komplizierter an als es am Ende ist:

public string getnonMultilang(string str, string lang, bool fallback) {
  // Suchpattern
  string pattern = "(" + lang + @"|\?\?_\?\?)@([^;]*)";
  Regex regex    = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
  // Pattern auf String anwenden
  Match match    = regex.Match(str);
  // wenn was gefunden wurde (ob nun allgemein oder Zielsprache)
  if (match.Length > 0) {
    return match.Groups[2].Value;
  }
  // Fallbacklösung, wenn fallback true und Zielsprache nicht vorhanden
  else if (lang != "de_DE" && fallback) {
    return getnonMultilang(str, "de_DE", false);
  }
  // wenn nichts verfügbar ist ""
  return "";
}

Die Fallbacklösung über den rekursiven Aufwand erspart mir schlicht ein wenig Tipparbeit, man könnte also auch alternativ das nochmal gegen den deutschen String prüfen. Ansonsten wird eben nach dem Schema wie oben schon beschrieben gesucht. Zum probieren, spielen, aber auch Code generieren kann ich an der Stelle nur regex101.com empfehlen. Ein tolles Projekt, was mir so manche Nacht verkürzt hat.

Ein Gedanke zu „Multilang-Strings einfach auslesen“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert