TxTranslation

Einfache aber mächtige Bibliothek für Übersetzungen und Lokalisierung in .NET-Anwendungen. Unterstützt XAML-Binding, Ersatzsprachen, Anzahl-abhängige Übersetzungen, Platzhalter und Zeitformatierung.

Es dauert nur etwa 4 Minuten, um diese Seite zu lesen.

tl;dr: Die Vorteile und Funktionen im Überblick:

  • Lokalisierungsunterstützung für alle Arten von .NET-Anwendungen
    (WPF, WinForms, ASP.NET, Dienst, Konsole)
  • Einfache Syntax durch XAML-Erweiterung und Windows-Forms-Binding
  • Komfortabler Editor für Wörterbücher mit Konsistenzprüfung und Vorschlägen ähnlicher Übersetzungen
  • Ersatzsprache bei fehlender Übersetzung eines Eintrags
  • Vollständige Drop-In-Lösung zur Lokalisierung für selbstständige Entwickler und kleine Unternehmen
  • Anzahl-abhängige Übersetzungen (Singular/Plural)
  • Benannte Platzhalter zur Einbindung von Daten
  • Formatierung von Zahlen und Zeitangaben
  • Typografische Unterstützung (Anführungszeichen, Satzzeichen usw.)
  • Speicherung aller Übersetzungen in einer XML-Wörterbuchdatei
  • Assistent für bestehende Zeichenketten in Visual Studio (C#, XAML)
  • Nutzung als eine DLL oder wenige C#-Quelldateien
  • Laufzeitprotokollierung

Das Tx-Konzept

Tx ist eine einfache aber mächtige Bibliothek für Übersetzungen und Lokalisierung in .NET-Anwendungen. Sie verwaltet ein Wörterbuch, das alle Textschnipsel und Sätze enthält, die für mehrere Übersetzungen benötigt werden. Falls für eine Sprache keine Übersetzung verfügbar ist, kann sie in anderen Sprachen gesucht werden. Texte können auch benannte Platzhalter enthalten, die zur Laufzeit mit Daten gefüllt werden, damit man nicht selbst alle Teile in der richtigen Reihenfolge zusammensetzen muss. Lokalisierungsaufgaben wie Typografie, Zahl- oder Zeitformatierung gemäß der lokalen Vorgaben werden ebenfalls abgedeckt.

Ein besonderes Merkmal von Tx-Wörterbüchern ist, dass jeder Text abhängig von einer Anzahl, um die es geht, unterschiedliche Übersetzungen haben kann, auch Pluralisierung genannt. Ein Tag ist ein anderes Wort als zwei Tage. Das erlaubt einem, den Benutzer in einer Oberfläche auf die natürlichste Art anzusprechen, ohne hässliche Klammern oder Alternativen für Pluralformulierungen.

Alle Texte und Übersetzungen werden in einer XML-Wörterbuchdatei gespeichert, eine pro Projekt. Diese XML-Datei enthält üblicherweise alle Sprachen. Das Wörterbuch kann mit der Anwendung installiert oder direkt als eingebettete Ressource einkompiliert werden.

Die TxLib-Bibliothek kann von jeder .NET-Anwendung genutzt werden und sie ist der Teil, der mit der Anwendung weitergegeben wird. Für portablere Anwendungen könnten die Klassendateien auch direkt ins Projekt eingebunden werden – es sind nur ein paar Dateien. Die Hauptklasse, Tx, wird in der Dokumentation genauer beschrieben.

Textschlüssel

Alle Texte sind mit Textschlüsseln verbunden. Ein Textschlüssel ist eine kurze Zeichenkette, die einen Text oder Satz eindeutig identifiziert und die normalerweise im Anwendungs-Quelltext genutzt wird, um einen bestimmten Text zu verwenden. Textschlüssel können vom Entwickler frei vergeben werden, es gibt allerdings ein paar Richtlinien zur Strukturierung, die am Ende der Dokumentation beschrieben werden, sowie ein paar zusätzliche Anforderungen bei der Nutzung des TxEditor-Werkzeugs.

Kulturen

Das .NET-Framework kennt das Konzept der Kulturen, um eine Kombination aus Sprache und Datenformatierungsregeln anzugeben. Jede Kultur hat einen Code, der die Sprache und optional eine Region beschreibt. Es gibt weitere Varianten, die von TxLib aber nicht unterstützt werden. Beispiele sind „en“ für die englische Sprache, „de-DE“ für die deutsche Sprache in Deutschland oder „pt-BR“ für die portugiesische Sprache in Brasilien (und nicht in Portugal, an das viele vielleicht zuerst denken). TxLib nutzt diese Kulturen, um Übersetzungen zu identifizieren. Es werden sowohl regionsspezifische als auch nur-Sprachen-Codes verwendet, wobei letztere als Ersatz dienen, wenn für eine bestimmte Kultur keine Übersetzung gefunden wurde.

TxEditor

Die TxTranslation-Lösung bringt auch einen grafischen Übersetzungseditor mit, der alle Funktionen für Übersetzer bietet, die nicht unbedingt Programmiererfahrung haben. Die TxEditor-Anwendung kann eine Wörterbuchdatei laden, alle enthaltenen Textschlüssel anzeigen und ermöglicht das Lesen und Bearbeiten der Übersetzungstexte. Sie führt außerdem Konsistenzprüfungen durch, um potentielle Fehler anzuzeigen und fehlende Übersetzungen hervorzuheben. TxEditor nutzt selbst auch TxLib, so dass es vollständig lokalisierbar ist, und kann verwendet werden, um sich selbst in andere Sprachen zu übersetzen.

Kompatibilität: .NET Ab Version 4.0

Beispiel

Im folgenden C#-Beispiel werden mehrere Anwendungsmöglichkeiten der Tx-Klasse gezeigt.

// Simple text retrieval by key:
Tx.T("my text key")

// Count-specific translations:
Tx.T("days", daysCount)

// Use of named placeholders:
Tx.T("user info",                // The text key
    "name", userName,            // Pairs of placeholder names and values
    "location", User.Location,
    "status", statusValue)

// Quote text (put it in local quotation marks):
Tx.Quote(someText)

// Combine translation and quote:
Tx.QT("my text key")

// Date formatting:
Tx.Time(DateTime.Now, TxTime.MonthDayLong)

// Relative time formatting:
Tx.RelativeTime(someTime)

// Bonus: ISO 8601 time interval handling:
new DateTimeInterval(DateTime.Now, "PT3H25M").TimeSpan

// Dictionary culture listing (returns string[]):
Tx.AvailableCultureNames

Im folgenden XAML-Beispiel werden mehrere Anwendungsmöglichkeiten der WPF-Bindings gezeigt.

<Window x:Class="WpfDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:Tx="http://unclassified.software/source/txtranslation" ...>
<StackPanel>
    <TextBlock Text="{Tx:T my text key}"/>
    <TextBlock Text="{Tx:T n months, {Binding Value, ElementName=Counter}}"/>
    <TextBlock Text="{Tx:Number {Binding Power}, 3, Unit=kW}"/>
    <TextBlock Text="{Tx:DataSize {Binding FileSize}}"/>
    <TextBlock Text="{Tx:Time {Binding LastUpdate}, Details='DowLong,YearMonthDay'}"/>
</StackPanel>

Die Dokumentation (docx und pdf im Code-Repository) beschreibt sowohl die Verwendung der TxLib-Methoden als auch des TxEditors ausführlicher.

Bilder

Hier sind einige Screenshots der TxEditor-Anwendung:

Image
TxEditor-Hauptfenster
Image
TxEditor-Hauptfenster
Image
Anzahl-spezifische Übersetzung
Image
TxEditor mit Extras
Image
Neuen Textschlüssel hinzufügen
Image
Markierung von Übersetzungsfehlern

Download

Hinweis: Veröffentlichungen nach dem 9.1.2016 sind nicht mehr digital signiert, da keine kostenlosen Code-Signing-Zertifikate für Open-Source-Entwickler mehr angeboten werden. Ein kommerzielles Zertifikat ab 200 € pro Jahr lohnt sich hier nicht. Entschuldigung für die Verunsicherung beim nächsten Download.

TxSetup-1.389.78_61a1bb.exe1,7 MiBInstallationsprogramm mit TxEditor, TxLib, Dokumentation, Quelltext und Code-Referenz
Version 1.389.78 vom 2016-01-25, Commit 61a1bb

TxChanges.txt2,3 KiBÄnderungen der veröffentlichten Versionen

master.zipAktueller Quelltext direkt von GitHub

Vorherige Versionen

Du kannst dir auch frühere Versionen bei GitHub herunterladen oder in die Aufgabenliste schauen:

TxTranslation-Repository bei GitHub

Dieses Paket ist auch über NuGet verfügbar. Auf diesem Weg kann es besonders schnell in ein Visual-Studio-Projekt eingebunden und später aktualisiert werden. Hier ist nur das TxLib-Assembly für .NET 4.0 enthalten. Um den TxEditor zu installieren, muss das oben genannte Setup-Programm heruntergeladen werden.

Unclassified.TxLib-Paket bei NuGet

Aktueller Entwicklungsstand

TxLib and the dictionary file format are now considered stable but little tested yet. There are plans for future additional features but no API change.

TxEditor is still new and also incomplete. Some indicated functions are missing or stop working in some conditions. The user interface is not yet rock-solid or even very clean. This is currently being improved.

The documentation is almost complete, but some sections about unfinished parts in TxEditor are also missing. The source code reference is not ready for the public yet, use the inline comments through IntelliSense instead (original source code or .xml file).

Änderungen

2016Jan25
Version 1.389.78 (Commit 61a1bb8)
  • TxEditor: Text key wizard: Preset language from current file type in the Visual Studio editor
  • TxEditor: Text key wizard: ASP.NET Razor .cshtml files are handled for code and content text
  • TxEditor: Text key wizard: "Add colon" option when one was found in the text
  • TxEditor: Text key wizard: Skip unused placeholders in code generation
  • TxEditor: Text key wizard: Enter key in "Similar texts" list select key instead of clicking the OK button
  • TxEditor: Text key wizard: Fixed file extension recognition for unsaved files (* after file name)
  • TxEditor: Text key wizard: Fixed parsing end of string quote within one level of parentheses in code
  • TxEditor: Load files selection: Double click opens file when the list is complete
  • TxEditor: Load files selection: Automatically load only found file with /scan option
  • TxEditor: Consider ellipsis character for inconsistent punctuation
  • TxEditor: Only accept numeric values in count and module fields
  • TxEditor: Avoid flickering of main window after closing text key wizard dialog
  • TxEditor: Writing XML comment with TxEditor download link into .txd files
  • Updated documentation (docx only)

2016Jan19
Version 1.383.76 (Commit da9f9bb)
  • TxEditor: Copy text key to clipboard from the context menu
  • TxEditor: Text key wizard: Support for C# 6 interpolated strings
  • TxEditor: Text key wizard: C# 6 string parsing, accelerator keys
  • TxLib: Obfuscation compatibility for XAML use
  • Shared code update and cleanup, updated formatting to new style guide
  • Update to Visual Studio 2015

2015Jul4
Version 1.184.37 (Commit 7f3858f)
  • TxLib: Fix: .txd file is not reloaded when saved with TxEditor

2015Apr24
Version 1.113.79 (Commit b4ffb00)
  • Allow disabling special verbose single-unit texts in Tx.TimeSpanRaw for generic use
  • Build script and tools updated

2015Feb23
Version 1.53.78 (Commit a21990a)
First log entry in this file.

Alle Änderungen lassen sich detailliert in der Commit-History des Git-Repositorys nachlesen.

Lizenz und Nutzungsbedingungen

Die TxLib-Bibliothek, die in Anwendungen verwendet wird, wird unter den Bedingungen der GNU-LGPL-Lizenz Version 3 veröffentlicht. Die anderen Projekte (TxEditor, Demos und Konverter) werden unter den Bedingungen der GNU-GPL-Lizenz Version 3 veröffentlicht. Die genauen Lizenzbedingungen befinden sich im Download oder auf der GNU-Website (LGPL, GPL).

Statistische Daten

  • Erstellt am 2013-07-01, aktualisiert am 2016-01-26.
  • Ca. 15 300 Codezeilen, geschätzte Ent­wick­lungs­kos­ten: 15 000 - 61 000 €