| 

.NET C# Java Javascript Exception

4
Wie gehe ich am Besten vor, um eine ASP.NET Web Forms-basierte Seite zu lokalisieren, die zu 99% aus Text besteht?

Über Resource-Dictionaries geht das zwar, ist aber arg umständlich und wenig handlich ...

Gibt es da nicht etwas besseres?
News:
18.04.2011
Golo Roden 2,7k 3 9
Hallo, handelt es sich um dynamischen Text, also Text der aus eine Datenbank kommen kann?
SensenMannLE 18.04.2011
Nein, statisch.

Der kann natürlich trotzdem aus einer DB kommen, allerdings editiere ich HTML lieber in Visual Studio als im SQL Server Management Studio.

Und dafür jetzt wieder eine extra Web-UI bauen lohnt wiederum nicht so wirklich ...
Golo Roden 18.04.2011
Dann evtl. per externen XML-Files die Inhalte speichern (also ähnlich den Ressource-Files), nur per eigener Strukturdefinition.
SensenMannLE 18.04.2011
Hmmm ... ja, wäre ne Möglichkeit, aber so richtig toll ist das nicht.

Es muss doch in ASP.NET irgendein Mittel von Haus aus geben, mit dem man größere Texte lokalisieren kann, ohne sich mit XML & Co herumschlagen zu müssen?
Golo Roden 18.04.2011
2 Antworten
4
Hoi Golo

Der ASP.NET integrierte Weg geht über das Localize-Control sowie normalerweise über resx-Dateien.
Meines Wissens kannst du dort die Datenquelle auch selber angeben.

Aber etwas anderes als resx das integriert ist, kenne ich nicht.
Zum Thema und vielleicht ist was dabei (Codeproject):
- Google Suche nach "asp.net localize

Zufälligerweise arbeite ich im Moment gerade an etwas, was man so umbauen und nutzen könnte.
Es ist eigentlich kein grosses Geheimnis, die Zutaten:
- http://xmlrepository.ch/ ;-)
- Eine Klasse wie:

public class TextContent
{
public string Key
{
get;
set;
}

public string Text
{
get;
set;
}
}


Zusätzlich ein Control wie:
[DefaultProperty("Key")]
[ToolboxData("<{0}:TextContentPlaceHolder runat=server></{0}:TextContentPlaceHolder>")]
public class TextContentPlaceHolder : WebControl
{
private TextContent _textContent;
private List<string> _lines;

public string Key
{
get;
set;
}

public HtmlTextWriterTag TextHtmlTag
{
get;
set;
}

public TextContentPlaceHolder()
{
this._lines = new List<string>();
this.TextHtmlTag = HtmlTextWriterTag.P;
}

protected override HtmlTextWriterTag TagKey
{
get
{
return HtmlTextWriterTag.Div;
}
}

protected override void Render(HtmlTextWriter writer)
{
var repository = Global.TextContentRepository;

if (!string.IsNullOrEmpty(this.Key))
{
if (repository.LoadAll().Any(e => e.Key == this.Key))
{
this._textContent = repository.LoadBy(this.Key);

this._lines = this._textContent.Text.Split(new[] { "\n" }, StringSplitOptions.None).ToList();

foreach (string line in this._lines)
{
if (!string.IsNullOrEmpty(line.Trim()))
{
// Wenn HTML, dann kein Paragraph-Tag rendern.
if (line.Contains("<"))
{
writer.Write(line);
}
else
{
writer.RenderBeginTag(this.TextHtmlTag);
writer.Write(line);
writer.RenderEndTag();
}
}
else
{
writer.WriteBreak();
}
}
}
else
{
repository.SaveOnSubmit(new TextContent { Key = this.Key });
repository.SubmitChanges();
}
}
}
}


Benutzung:
<pb:TextContentPlaceHolder Key="Test" runat="server" />


Beispiel XML:
<root>
<TextContent>
<Key>Test</Key>
<Text>
Normaler Text

Ein Zeilenumbruch


Zwei Zeilenumbrücke
<![CDATA[
<strong>Html geht wunderbar</strong>
<h1>Test</h1>
]]>
</TextContent>
</root>


Jetzt der Clou:
Füge dem Control noch eine kleine Designer-Unterstützung hinzu, wo du den Text im ASP.NET (ASPX)-Designer bearbeiten kannst.

Für deinen Fall noch ein Dropdown für Sprachen und bei der Datenkklasse einen Language-Key hinzufügen, et voila.


Liebe Grüsse Peter
18.04.2011
Peter Bucher 178 5
Ist gekauft :-)
Golo Roden 18.04.2011
Rechnung ist schon abgeschickt :-)
Peter Bucher 18.04.2011
0
Ich habe gute Erfahrungen mit diesem Tool gemacht: http://www.jollans.com/tiki/tiki-index.php?page=homepage. Bei Fragen ist Herr Jollans auch sehr freundlich und kooperativ.
18.04.2011
KN 1,7k 1 8
KN 1,7k 1 8
Danke für den Hinweis, aber mir wäre eine integrierte Lösung lieber ... muss doch auch irgendwie so gehen?
Golo Roden 18.04.2011

Stelle deine .net-Frage jetzt!