changeset 551:312da78ab301

Translator: changed type of LastEd field in cat files to int.
author Aziz K?ksal <aziz.koeksal@gmail.com>
date Thu, 20 Dec 2007 20:00:48 +0100
parents 082126d78f90
children 3bc7801c207e
files trunk/i18n/de.cat trunk/i18n/en.cat trunk/i18n/fi.cat trunk/i18n/tr.cat trunk/src/translator/langfile.py trunk/src/translator/translator.py
diffstat 6 files changed, 255 insertions(+), 230 deletions(-) [+]
line wrap: on
line diff
--- a/trunk/i18n/de.cat	Thu Dec 20 14:48:21 2007 +0100
+++ b/trunk/i18n/de.cat	Thu Dec 20 20:00:48 2007 +0100
@@ -1,69 +1,68 @@
 Authors:
-- [Aziz Köksal, aziz.koeksal@gmail.com]
+- {EMail: aziz.koeksal@gmail.com, Name: Aziz Köksal}
 LangCode: de
 License: GPL3
 Messages:
-- {Annot: '', ID: 0, LastEd: '', Text: 'illegales Zeichen gefunden: ''{0}'''}
-- {Annot: '', ID: 1, LastEd: '', Text: ungültiges Unicodezeichen.}
-- {Annot: '', ID: 2, LastEd: '', Text: ungültige UTF-8-Sequenz.}
-- {Annot: '', ID: 3, LastEd: '', Text: unterminiertes Zeichenliteral.}
-- {Annot: '', ID: 4, LastEd: '', Text: leeres Zeichenliteral.}
-- {Annot: '', ID: 5, LastEd: '', Text: erwartete 'line' nach '#'.}
-- {Annot: '', ID: 6, LastEd: '', Text: 'Ganzzahl nach #line erwartet.'}
-- {Annot: '', ID: 7, LastEd: '', Text: erwartete Dateispezifikation (z.B. "pfad\zur\datei".)}
-- {Annot: '', ID: 8, LastEd: '', Text: unterminierte Dateispezifikation (filespec.)}
-- {Annot: '', ID: 9, LastEd: '', Text: ein Special Token muss mit einem Zeilenumbruch
+- {Annot: '', ID: 0, LastEd: 0, Text: 'illegales Zeichen gefunden: ''{0}'''}
+- {Annot: '', ID: 1, LastEd: 0, Text: ungültiges Unicodezeichen.}
+- {Annot: '', ID: 2, LastEd: 0, Text: ungültige UTF-8-Sequenz.}
+- {Annot: '', ID: 3, LastEd: 0, Text: unterminiertes Zeichenliteral.}
+- {Annot: '', ID: 4, LastEd: 0, Text: leeres Zeichenliteral.}
+- {Annot: '', ID: 5, LastEd: 0, Text: erwartete 'line' nach '#'.}
+- {Annot: '', ID: 6, LastEd: 0, Text: 'Ganzzahl nach #line erwartet.'}
+- {Annot: '', ID: 7, LastEd: 0, Text: erwartete Dateispezifikation (z.B. "pfad\zur\datei".)}
+- {Annot: '', ID: 8, LastEd: 0, Text: unterminierte Dateispezifikation (filespec.)}
+- {Annot: '', ID: 9, LastEd: 0, Text: ein Special Token muss mit einem Zeilenumbruch
     abgeschlossen werden.}
-- {Annot: '', ID: 10, LastEd: '', Text: unterminiertes Zeichenkettenliteral.}
-- {Annot: '', ID: 11, LastEd: '', Text: 'Nicht-Hexzeichen ''{0}'' in Hexzeichenkette
+- {Annot: '', ID: 10, LastEd: 0, Text: unterminiertes Zeichenkettenliteral.}
+- {Annot: '', ID: 11, LastEd: 0, Text: 'Nicht-Hexzeichen ''{0}'' in Hexzeichenkette
     gefunden.'}
-- {Annot: '', ID: 12, LastEd: '', Text: ungerade Anzahl von Hexziffern in Hexzeichenkette.}
-- {Annot: '', ID: 13, LastEd: '', Text: unterminierte Hexzeichenkette.}
-- {Annot: '', ID: 14, LastEd: '', Text: unterminierter Blockkommentar (/* */).}
-- {Annot: '', ID: 15, LastEd: '', Text: unterminierter verschachtelter Kommentar (/+
+- {Annot: '', ID: 12, LastEd: 0, Text: ungerade Anzahl von Hexziffern in Hexzeichenkette.}
+- {Annot: '', ID: 13, LastEd: 0, Text: unterminierte Hexzeichenkette.}
+- {Annot: '', ID: 14, LastEd: 0, Text: unterminierter Blockkommentar (/* */).}
+- {Annot: '', ID: 15, LastEd: 0, Text: unterminierter verschachtelter Kommentar (/+
     +/).}
-- {Annot: '', ID: 16, LastEd: '', Text: unterminierte rohe Zeichenkette.}
-- {Annot: '', ID: 17, LastEd: '', Text: unterminierte Backquote-Zeichenkette.}
-- {Annot: '', ID: 18, LastEd: '', Text: 'undefinierte Escapesequenz ''{0}'' gefunden.'}
-- {Annot: '', ID: 19, LastEd: '', Text: 'ungültige Unicode-Escapesequenz ''{0}'' gefunden.'}
-- {Annot: '', ID: 20, LastEd: '', Text: unzureichende Anzahl von Hexziffern in Escapesequenz.}
-- {Annot: '', ID: 21, LastEd: '', Text: 'undefinierte HTML-Entität ''{0}'''}
-- {Annot: '', ID: 22, LastEd: '', Text: 'unterminierte HTML-Entität ''{0}''.'}
-- {Annot: '', ID: 23, LastEd: '', Text: HTML-Entitäten müssen mit einem Buchstaben
+- {Annot: '', ID: 16, LastEd: 0, Text: unterminierte rohe Zeichenkette.}
+- {Annot: '', ID: 17, LastEd: 0, Text: unterminierte Backquote-Zeichenkette.}
+- {Annot: '', ID: 18, LastEd: 0, Text: 'undefinierte Escapesequenz ''{0}'' gefunden.'}
+- {Annot: '', ID: 19, LastEd: 0, Text: 'ungültige Unicode-Escapesequenz ''{0}'' gefunden.'}
+- {Annot: '', ID: 20, LastEd: 0, Text: unzureichende Anzahl von Hexziffern in Escapesequenz.}
+- {Annot: '', ID: 21, LastEd: 0, Text: 'undefinierte HTML-Entität ''{0}'''}
+- {Annot: '', ID: 22, LastEd: 0, Text: 'unterminierte HTML-Entität ''{0}''.'}
+- {Annot: '', ID: 23, LastEd: 0, Text: HTML-Entitäten müssen mit einem Buchstaben
     beginnen.}
-- {Annot: '', ID: 24, LastEd: '', Text: Dezimalzahl überläuft im Vorzeichenbit.}
-- {Annot: '', ID: 25, LastEd: '', Text: Überlauf in Dezimalzahl.}
-- {Annot: '', ID: 26, LastEd: '', Text: Überlauf in Hexadezimalzahl.}
-- {Annot: '', ID: 27, LastEd: '', Text: Überlauf in Binärzahl.}
-- {Annot: '', ID: 28, LastEd: '', Text: Überlauf in Oktalzahl.}
-- {Annot: '', ID: 29, LastEd: '', Text: Überlauf in Fließkommazahl.}
-- {Annot: '', ID: 30, LastEd: '', Text: die Ziffern 8 und 9 sind in Oktalzahlen unzulässig.}
-- {Annot: '', ID: 31, LastEd: '', Text: ungültige Hexzahl; mindestens eine Hexziffer
+- {Annot: '', ID: 24, LastEd: 0, Text: Dezimalzahl überläuft im Vorzeichenbit.}
+- {Annot: '', ID: 25, LastEd: 0, Text: Überlauf in Dezimalzahl.}
+- {Annot: '', ID: 26, LastEd: 0, Text: Überlauf in Hexadezimalzahl.}
+- {Annot: '', ID: 27, LastEd: 0, Text: Überlauf in Binärzahl.}
+- {Annot: '', ID: 28, LastEd: 0, Text: Überlauf in Oktalzahl.}
+- {Annot: '', ID: 29, LastEd: 0, Text: Überlauf in Fließkommazahl.}
+- {Annot: '', ID: 30, LastEd: 0, Text: die Ziffern 8 und 9 sind in Oktalzahlen unzulässig.}
+- {Annot: '', ID: 31, LastEd: 0, Text: ungültige Hexzahl; mindestens eine Hexziffer
     erforderlich.}
-- {Annot: '', ID: 32, LastEd: '', Text: ungültige Binärzahl; mindestens eine Binärziffer
+- {Annot: '', ID: 32, LastEd: 0, Text: ungültige Binärzahl; mindestens eine Binärziffer
     erforderlich.}
-- {Annot: '', ID: 33, LastEd: '', Text: der Exponent einer hexadezimalen Fließkommazahl
+- {Annot: '', ID: 33, LastEd: 0, Text: der Exponent einer hexadezimalen Fließkommazahl
     ist erforderlich.}
-- {Annot: '', ID: 34, LastEd: '', Text: Hexadezimal-Exponenten müssen mit einer Dezimalziffer
-    anfangen.}
-- {Annot: '', ID: 35, LastEd: '', Text: Exponenten müssen mit einer Dezimalziffer
+- {Annot: '', ID: 34, LastEd: 0, Text: Hexadezimal-Exponenten müssen mit einer Dezimalziffer
     anfangen.}
-- {Annot: '', ID: 36, LastEd: '', Text: 'erwartete ''{0}'', fand aber ''{1}''.'}
-- {Annot: '', ID: 37, LastEd: '', Text: '''{0}'' ist redundant.'}
-- {Annot: '', ID: 38, LastEd: '', Text: Template-Tupel-Parameter dürfen nur am Ende
+- {Annot: '', ID: 35, LastEd: 0, Text: Exponenten müssen mit einer Dezimalziffer anfangen.}
+- {Annot: '', ID: 36, LastEd: 0, Text: 'erwartete ''{0}'', fand aber ''{1}''.'}
+- {Annot: '', ID: 37, LastEd: 0, Text: '''{0}'' ist redundant.'}
+- {Annot: '', ID: 38, LastEd: 0, Text: Template-Tupel-Parameter dürfen nur am Ende
     auftreten.}
-- {Annot: '', ID: 39, LastEd: '', Text: der 'in'-Vertrag der Funktion wurde bereits
+- {Annot: '', ID: 39, LastEd: 0, Text: der 'in'-Vertrag der Funktion wurde bereits
     geparsed.}
-- {Annot: '', ID: 40, LastEd: '', Text: der 'out'-Vertrag der Funktion wurde bereits
+- {Annot: '', ID: 40, LastEd: 0, Text: der 'out'-Vertrag der Funktion wurde bereits
     geparsed.}
-- {Annot: '', ID: 41, LastEd: '', Text: es wurde kein Verbindungstyp angegeben.}
-- {Annot: '', ID: 42, LastEd: '', Text: 'unbekannter Verbindungstyp ''{0}''; gültig
+- {Annot: '', ID: 41, LastEd: 0, Text: es wurde kein Verbindungstyp angegeben.}
+- {Annot: '', ID: 42, LastEd: 0, Text: 'unbekannter Verbindungstyp ''{0}''; gültig
     sind C, C++, D, Windows, Pascal und System.'}
-- {Annot: '', ID: 43, LastEd: '', Text: 'erwartete eine oder mehrere Basisklassen,
+- {Annot: '', ID: 43, LastEd: 0, Text: 'erwartete eine oder mehrere Basisklassen,
     nicht ''{0}''.'}
-- {Annot: '', ID: 44, LastEd: '', Text: Basisklassen sind in Vorwärtsdeklarationen
+- {Annot: '', ID: 44, LastEd: 0, Text: Basisklassen sind in Vorwärtsdeklarationen
     nicht erlaubt.}
-- {Annot: '', ID: 45, LastEd: '', Text: 'dil v{0}
+- {Annot: '', ID: 45, LastEd: 0, Text: 'dil v{0}
 
     Copyright (c) 2007, Aziz Köksal. Lizensiert unter der GPL3.
 
@@ -79,9 +78,9 @@
 
 
     Kompiliert mit {2} v{3} am {4}.'}
-- {Annot: '', ID: 46, LastEd: '', Text: "Generiere ein XML- oder HTML-Dokument aus\
+- {Annot: '', ID: 46, LastEd: 0, Text: "Generiere ein XML- oder HTML-Dokument aus\
     \ einer D-Quelltextdatei.\nVerwendung:\n  dil gen datei.d [Optionen]\n\nOptionen:\n\
     \  --syntax         : generiere Elemente für den Syntaxbaum\n  --xml         \
     \   : verwende XML-Format (voreingestellt)\n  --html           : verwende HTML-Format\n\
     \nBeispiel:\n  dil gen Parser.d --html --syntax > Parser.html"}
-- {Annot: '', ID: 47, LastEd: '', Text: ''}
+- {Annot: '', ID: 47, LastEd: 0, Text: ''}
--- a/trunk/i18n/en.cat	Thu Dec 20 14:48:21 2007 +0100
+++ b/trunk/i18n/en.cat	Thu Dec 20 20:00:48 2007 +0100
@@ -1,61 +1,61 @@
 Authors:
-- [Aziz Köksal, aziz.koeksal@gmail.com]
+- {EMail: aziz.koeksal@gmail.com, Name: Aziz Köksal}
 LangCode: en
 License: GPL3
 Messages:
-- {Annot: '', ID: 0, LastEd: '', Text: 'illegal character found: ''{0}'''}
-- {Annot: '', ID: 1, LastEd: '', Text: invalid Unicode character.}
-- {Annot: '', ID: 2, LastEd: '', Text: invalid UTF-8 sequence.}
-- {Annot: '', ID: 3, LastEd: '', Text: unterminated character literal.}
-- {Annot: '', ID: 4, LastEd: '', Text: empty character literal.}
-- {Annot: '', ID: 5, LastEd: '', Text: expected 'line' after '#'.}
-- {Annot: '', ID: 6, LastEd: '', Text: 'integer expected after #line'}
-- {Annot: '', ID: 7, LastEd: '', Text: expected filespec string (e.g. "path\to\file".)}
-- {Annot: '', ID: 8, LastEd: '', Text: unterminated filespec string.}
-- {Annot: '', ID: 9, LastEd: '', Text: expected a terminating newline after special
+- {Annot: '', ID: 0, LastEd: 0, Text: 'illegal character found: ''{0}'''}
+- {Annot: '', ID: 1, LastEd: 0, Text: invalid Unicode character.}
+- {Annot: '', ID: 2, LastEd: 0, Text: invalid UTF-8 sequence.}
+- {Annot: '', ID: 3, LastEd: 0, Text: unterminated character literal.}
+- {Annot: '', ID: 4, LastEd: 0, Text: empty character literal.}
+- {Annot: '', ID: 5, LastEd: 0, Text: expected 'line' after '#'.}
+- {Annot: '', ID: 6, LastEd: 0, Text: 'integer expected after #line'}
+- {Annot: '', ID: 7, LastEd: 0, Text: expected filespec string (e.g. "path\to\file".)}
+- {Annot: '', ID: 8, LastEd: 0, Text: unterminated filespec string.}
+- {Annot: '', ID: 9, LastEd: 0, Text: expected a terminating newline after special
     token.}
-- {Annot: '', ID: 10, LastEd: '', Text: unterminated string literal.}
-- {Annot: '', ID: 11, LastEd: '', Text: 'non-hex character ''{0}'' found in hex string.'}
-- {Annot: '', ID: 12, LastEd: '', Text: odd number of hex digits in hex string.}
-- {Annot: '', ID: 13, LastEd: '', Text: unterminated hex string.}
-- {Annot: '', ID: 14, LastEd: '', Text: unterminated block comment (/* */).}
-- {Annot: '', ID: 15, LastEd: '', Text: unterminated nested comment (/+ +/).}
-- {Annot: '', ID: 16, LastEd: '', Text: unterminated raw string.}
-- {Annot: '', ID: 17, LastEd: '', Text: unterminated back quote string.}
-- {Annot: '', ID: 18, LastEd: '', Text: 'found undefined escape sequence ''{0}''.'}
-- {Annot: '', ID: 19, LastEd: '', Text: 'found invalid Unicode escape sequence ''{0}''.'}
-- {Annot: '', ID: 20, LastEd: '', Text: insufficient number of hex digits in escape
+- {Annot: '', ID: 10, LastEd: 0, Text: unterminated string literal.}
+- {Annot: '', ID: 11, LastEd: 0, Text: 'non-hex character ''{0}'' found in hex string.'}
+- {Annot: '', ID: 12, LastEd: 0, Text: odd number of hex digits in hex string.}
+- {Annot: '', ID: 13, LastEd: 0, Text: unterminated hex string.}
+- {Annot: '', ID: 14, LastEd: 0, Text: unterminated block comment (/* */).}
+- {Annot: '', ID: 15, LastEd: 0, Text: unterminated nested comment (/+ +/).}
+- {Annot: '', ID: 16, LastEd: 0, Text: unterminated raw string.}
+- {Annot: '', ID: 17, LastEd: 0, Text: unterminated back quote string.}
+- {Annot: '', ID: 18, LastEd: 0, Text: 'found undefined escape sequence ''{0}''.'}
+- {Annot: '', ID: 19, LastEd: 0, Text: 'found invalid Unicode escape sequence ''{0}''.'}
+- {Annot: '', ID: 20, LastEd: 0, Text: insufficient number of hex digits in escape
     sequence.}
-- {Annot: '', ID: 21, LastEd: '', Text: 'undefined HTML entity ''{0}'''}
-- {Annot: '', ID: 22, LastEd: '', Text: 'unterminated HTML entity ''{0}''.'}
-- {Annot: '', ID: 23, LastEd: '', Text: HTML entities must begin with a letter.}
-- {Annot: '', ID: 24, LastEd: '', Text: decimal number overflows sign bit.}
-- {Annot: '', ID: 25, LastEd: '', Text: overflow in decimal number.}
-- {Annot: '', ID: 26, LastEd: '', Text: overflow in hexadecimal number.}
-- {Annot: '', ID: 27, LastEd: '', Text: overflow in binary number.}
-- {Annot: '', ID: 28, LastEd: '', Text: overflow in octal number.}
-- {Annot: '', ID: 29, LastEd: '', Text: overflow in float number.}
-- {Annot: '', ID: 30, LastEd: '', Text: digits 8 and 9 are not allowed in octal numbers.}
-- {Annot: '', ID: 31, LastEd: '', Text: invalid hex number; at least one hex digit
+- {Annot: '', ID: 21, LastEd: 0, Text: 'undefined HTML entity ''{0}'''}
+- {Annot: '', ID: 22, LastEd: 0, Text: 'unterminated HTML entity ''{0}''.'}
+- {Annot: '', ID: 23, LastEd: 0, Text: HTML entities must begin with a letter.}
+- {Annot: '', ID: 24, LastEd: 0, Text: decimal number overflows sign bit.}
+- {Annot: '', ID: 25, LastEd: 0, Text: overflow in decimal number.}
+- {Annot: '', ID: 26, LastEd: 0, Text: overflow in hexadecimal number.}
+- {Annot: '', ID: 27, LastEd: 0, Text: overflow in binary number.}
+- {Annot: '', ID: 28, LastEd: 0, Text: overflow in octal number.}
+- {Annot: '', ID: 29, LastEd: 0, Text: overflow in float number.}
+- {Annot: '', ID: 30, LastEd: 0, Text: digits 8 and 9 are not allowed in octal numbers.}
+- {Annot: '', ID: 31, LastEd: 0, Text: invalid hex number; at least one hex digit
     expected.}
-- {Annot: '', ID: 32, LastEd: '', Text: invalid binary number; at least one binary
+- {Annot: '', ID: 32, LastEd: 0, Text: invalid binary number; at least one binary
     digit expected.}
-- {Annot: '', ID: 33, LastEd: '', Text: the exponent of a hexadecimal float number
+- {Annot: '', ID: 33, LastEd: 0, Text: the exponent of a hexadecimal float number
     is required.}
-- {Annot: '', ID: 34, LastEd: '', Text: hexadecimal float exponents must start with
+- {Annot: '', ID: 34, LastEd: 0, Text: hexadecimal float exponents must start with
     a digit.}
-- {Annot: '', ID: 35, LastEd: '', Text: exponents must start with a digit.}
-- {Annot: '', ID: 36, LastEd: '', Text: 'expected ''{0}'', but found ''{1}''.'}
-- {Annot: '', ID: 37, LastEd: '', Text: '''{0}'' is redundant.'}
-- {Annot: '', ID: 38, LastEd: '', Text: template tuple parameters can only be last.}
-- {Annot: '', ID: 39, LastEd: '', Text: the functions 'in' contract was already parsed.}
-- {Annot: '', ID: 40, LastEd: '', Text: the functions 'out' contract was already parsed.}
-- {Annot: '', ID: 41, LastEd: '', Text: no linkage type was specified.}
-- {Annot: '', ID: 42, LastEd: '', Text: 'unrecognized linkage type ''{0}''; valid
-    types are C, C++, D, Windows, Pascal und System.'}
-- {Annot: '', ID: 43, LastEd: '', Text: 'expected one or more base classes, not ''{0}''.'}
-- {Annot: '', ID: 44, LastEd: '', Text: base classes are not allowed in forward declarations.}
-- {Annot: '', ID: 45, LastEd: '', Text: 'dil v{0}
+- {Annot: '', ID: 35, LastEd: 0, Text: exponents must start with a digit.}
+- {Annot: '', ID: 36, LastEd: 0, Text: 'expected ''{0}'', but found ''{1}''.'}
+- {Annot: '', ID: 37, LastEd: 0, Text: '''{0}'' is redundant.'}
+- {Annot: '', ID: 38, LastEd: 0, Text: template tuple parameters can only be last.}
+- {Annot: '', ID: 39, LastEd: 0, Text: the functions 'in' contract was already parsed.}
+- {Annot: '', ID: 40, LastEd: 0, Text: the functions 'out' contract was already parsed.}
+- {Annot: '', ID: 41, LastEd: 0, Text: no linkage type was specified.}
+- {Annot: '', ID: 42, LastEd: 0, Text: 'unrecognized linkage type ''{0}''; valid types
+    are C, C++, D, Windows, Pascal und System.'}
+- {Annot: '', ID: 43, LastEd: 0, Text: 'expected one or more base classes, not ''{0}''.'}
+- {Annot: '', ID: 44, LastEd: 0, Text: base classes are not allowed in forward declarations.}
+- {Annot: '', ID: 45, LastEd: 0, Text: 'dil v{0}
 
     Copyright (c) 2007 by Aziz Köksal. Licensed under the GPL3.
 
@@ -68,12 +68,12 @@
 
 
     Compiled with {2} v{3} on {4}.'}
-- {Annot: '', ID: 46, LastEd: '', Text: "Generate an XML or HTML document from a D\
+- {Annot: '', ID: 46, LastEd: 0, Text: "Generate an XML or HTML document from a D\
     \ source file.\nUsage:\n  dil gen file.d [Options]\n\nOptions:\n  --syntax   \
     \      : generate tags for the syntax tree\n  --xml            : use XML format\
     \ (default)\n  --html           : use HTML format\n\nExample:\n  dil gen Parser.d\
     \ --html --syntax > Parser.html"}
-- {Annot: '', ID: 47, LastEd: '', Text: "Parse a module and extract information from\
+- {Annot: '', ID: 47, LastEd: 0, Text: "Parse a module and extract information from\
     \ the resulting module dependency graph.\nUsage:\n  dil igraph file.d Format [Options]\n\
     \n  The directory of file.d is implicitly added to the list of import paths.\n\
     \nFormat:\n  --dot            : generate a dot document\n  Further options for\
--- a/trunk/i18n/fi.cat	Thu Dec 20 14:48:21 2007 +0100
+++ b/trunk/i18n/fi.cat	Thu Dec 20 20:00:48 2007 +0100
@@ -1,61 +1,61 @@
 Authors:
-- [Jari-Matti Mäkelä, jmjm@iki.fi]
+- {EMail: jmjm@iki.fi, Name: Jari-Matti Mäkelä}
 LangCode: fi
 License: GPL3
 Messages:
-- {Annot: '', ID: 0, LastEd: '', Text: ''}
-- {Annot: '', ID: 1, LastEd: '', Text: virheellinen Unicode-merkki.}
-- {Annot: '', ID: 2, LastEd: '', Text: virheellinen UTF-8-merkkijono.}
-- {Annot: '', ID: 3, LastEd: '', Text: päättämätön merkkiliteraali.}
-- {Annot: '', ID: 4, LastEd: '', Text: tyhjä merkkiliteraali.}
-- {Annot: '', ID: 5, LastEd: '', Text: 'odotettiin rivinumeroa ''#'':n jälkeen.'}
-- {Annot: '', ID: 6, LastEd: '', Text: 'odotettiin kokonaislukua #line:n jälkeen'}
-- {Annot: '', ID: 7, LastEd: '', Text: odotettiin tiedostomäärittelyn merkkijonoa
-    (esim. "polku\tiedostoon")}
-- {Annot: '', ID: 8, LastEd: '', Text: päättämätön tiedostomäärittely.}
-- {Annot: '', ID: 9, LastEd: '', Text: odotettiin päättävää rivinvaihtoa erikoismerkin
+- {Annot: '', ID: 0, LastEd: 0, Text: ''}
+- {Annot: '', ID: 1, LastEd: 0, Text: virheellinen Unicode-merkki.}
+- {Annot: '', ID: 2, LastEd: 0, Text: virheellinen UTF-8-merkkijono.}
+- {Annot: '', ID: 3, LastEd: 0, Text: päättämätön merkkiliteraali.}
+- {Annot: '', ID: 4, LastEd: 0, Text: tyhjä merkkiliteraali.}
+- {Annot: '', ID: 5, LastEd: 0, Text: 'odotettiin rivinumeroa ''#'':n jälkeen.'}
+- {Annot: '', ID: 6, LastEd: 0, Text: 'odotettiin kokonaislukua #line:n jälkeen'}
+- {Annot: '', ID: 7, LastEd: 0, Text: odotettiin tiedostomäärittelyn merkkijonoa (esim.
+    "polku\tiedostoon")}
+- {Annot: '', ID: 8, LastEd: 0, Text: päättämätön tiedostomäärittely.}
+- {Annot: '', ID: 9, LastEd: 0, Text: odotettiin päättävää rivinvaihtoa erikoismerkin
     jälkeen.}
-- {Annot: '', ID: 10, LastEd: '', Text: päättämätön merkkijonoliteraali.}
-- {Annot: '', ID: 11, LastEd: '', Text: 'ei-heksamerkki ''{0}'' löytyi heksajonossa.'}
-- {Annot: '', ID: 12, LastEd: '', Text: pariton määrä heksanumeroita heksajonossa.}
-- {Annot: '', ID: 13, LastEd: '', Text: päättämätön heksajono.}
-- {Annot: '', ID: 14, LastEd: '', Text: päättämätön lohkokommentti (/* */).}
-- {Annot: '', ID: 15, LastEd: '', Text: päättämätön sisäkkäinen kommentti (/+ +/).}
-- {Annot: '', ID: 16, LastEd: '', Text: päättämätön raakamerkkijono.}
-- {Annot: '', ID: 17, LastEd: '', Text: päättämätön gravisaksenttimerkkijono.}
-- {Annot: '', ID: 18, LastEd: '', Text: löydettiin määrittelemätön escape-sekvenssi.}
-- {Annot: '', ID: 19, LastEd: '', Text: 'found invalid Unicode escape sequence ''{0}''.'}
-- {Annot: '', ID: 20, LastEd: '', Text: riittämätön määrä heksanumeroita escape-sekvenssissä.}
-- {Annot: '', ID: 21, LastEd: '', Text: 'määrittelemätön HTML-entiteetti ''{0}'''}
-- {Annot: '', ID: 22, LastEd: '', Text: päättämätön HTML-entiteetti.}
-- {Annot: '', ID: 23, LastEd: '', Text: HTML-entiteettien tulee alkaa kirjaimella.}
-- {Annot: '', ID: 24, LastEd: '', Text: desimaaliluku ylivuotaa etumerkin.}
-- {Annot: '', ID: 25, LastEd: '', Text: desimaaliluvun ylivuoto.}
-- {Annot: '', ID: 26, LastEd: '', Text: heksadesimaaliluvun ylivuoto.}
-- {Annot: '', ID: 27, LastEd: '', Text: binääriluvun ylivuoto.}
-- {Annot: '', ID: 28, LastEd: '', Text: oktaaliluvun ylivuoto.}
-- {Annot: '', ID: 29, LastEd: '', Text: liukuluvun ylivuoto.}
-- {Annot: '', ID: 30, LastEd: '', Text: numerot 8 ja 9 eivät ole sallittuja oktaaliluvuissa.}
-- {Annot: '', ID: 31, LastEd: '', Text: virheellinen heksaluku; odotettiin vähintään
+- {Annot: '', ID: 10, LastEd: 0, Text: päättämätön merkkijonoliteraali.}
+- {Annot: '', ID: 11, LastEd: 0, Text: 'ei-heksamerkki ''{0}'' löytyi heksajonossa.'}
+- {Annot: '', ID: 12, LastEd: 0, Text: pariton määrä heksanumeroita heksajonossa.}
+- {Annot: '', ID: 13, LastEd: 0, Text: päättämätön heksajono.}
+- {Annot: '', ID: 14, LastEd: 0, Text: päättämätön lohkokommentti (/* */).}
+- {Annot: '', ID: 15, LastEd: 0, Text: päättämätön sisäkkäinen kommentti (/+ +/).}
+- {Annot: '', ID: 16, LastEd: 0, Text: päättämätön raakamerkkijono.}
+- {Annot: '', ID: 17, LastEd: 0, Text: päättämätön gravisaksenttimerkkijono.}
+- {Annot: '', ID: 18, LastEd: 0, Text: löydettiin määrittelemätön escape-sekvenssi.}
+- {Annot: '', ID: 19, LastEd: 0, Text: 'found invalid Unicode escape sequence ''{0}''.'}
+- {Annot: '', ID: 20, LastEd: 0, Text: riittämätön määrä heksanumeroita escape-sekvenssissä.}
+- {Annot: '', ID: 21, LastEd: 0, Text: 'määrittelemätön HTML-entiteetti ''{0}'''}
+- {Annot: '', ID: 22, LastEd: 0, Text: päättämätön HTML-entiteetti.}
+- {Annot: '', ID: 23, LastEd: 0, Text: HTML-entiteettien tulee alkaa kirjaimella.}
+- {Annot: '', ID: 24, LastEd: 0, Text: desimaaliluku ylivuotaa etumerkin.}
+- {Annot: '', ID: 25, LastEd: 0, Text: desimaaliluvun ylivuoto.}
+- {Annot: '', ID: 26, LastEd: 0, Text: heksadesimaaliluvun ylivuoto.}
+- {Annot: '', ID: 27, LastEd: 0, Text: binääriluvun ylivuoto.}
+- {Annot: '', ID: 28, LastEd: 0, Text: oktaaliluvun ylivuoto.}
+- {Annot: '', ID: 29, LastEd: 0, Text: liukuluvun ylivuoto.}
+- {Annot: '', ID: 30, LastEd: 0, Text: numerot 8 ja 9 eivät ole sallittuja oktaaliluvuissa.}
+- {Annot: '', ID: 31, LastEd: 0, Text: virheellinen heksaluku; odotettiin vähintään
     yhtä heksanumeroa.}
-- {Annot: '', ID: 32, LastEd: '', Text: virheellinen binääriluku; odotettiin vähintään
+- {Annot: '', ID: 32, LastEd: 0, Text: virheellinen binääriluku; odotettiin vähintään
     yhtä binäärinumeroa.}
-- {Annot: '', ID: 33, LastEd: '', Text: heksadesimaalisen liukuluvun eksponentti vaaditaan.}
-- {Annot: '', ID: 34, LastEd: '', Text: heksadesimaalisen liukuluvun eksponentista
+- {Annot: '', ID: 33, LastEd: 0, Text: heksadesimaalisen liukuluvun eksponentti vaaditaan.}
+- {Annot: '', ID: 34, LastEd: 0, Text: heksadesimaalisen liukuluvun eksponentista
     puuttui numeroita.}
-- {Annot: '', ID: 35, LastEd: '', Text: eksponenttien tulee alkaa numerolla.}
-- {Annot: '', ID: 36, LastEd: '', Text: 'odotettiin ''{0}'':a, mutta löydettiin ''{1}''.'}
-- {Annot: '', ID: 37, LastEd: '', Text: '''{0}'' on redundantti.'}
-- {Annot: '', ID: 38, LastEd: '', Text: tupla voi esiintyä ainoastaan mallin viimeisenä
+- {Annot: '', ID: 35, LastEd: 0, Text: eksponenttien tulee alkaa numerolla.}
+- {Annot: '', ID: 36, LastEd: 0, Text: 'odotettiin ''{0}'':a, mutta löydettiin ''{1}''.'}
+- {Annot: '', ID: 37, LastEd: 0, Text: '''{0}'' on redundantti.'}
+- {Annot: '', ID: 38, LastEd: 0, Text: tupla voi esiintyä ainoastaan mallin viimeisenä
     parametrina.}
-- {Annot: '', ID: 39, LastEd: '', Text: funktion alkuehto jäsennettiin jo.}
-- {Annot: '', ID: 40, LastEd: '', Text: funktion loppuehto jäsennettiin jo.}
-- {Annot: '', ID: 41, LastEd: '', Text: linkitystyyppiä ei määritelty.}
-- {Annot: '', ID: 42, LastEd: '', Text: 'tunnistamaton linkitystyyppi ''{0}''; sallittuja
+- {Annot: '', ID: 39, LastEd: 0, Text: funktion alkuehto jäsennettiin jo.}
+- {Annot: '', ID: 40, LastEd: 0, Text: funktion loppuehto jäsennettiin jo.}
+- {Annot: '', ID: 41, LastEd: 0, Text: linkitystyyppiä ei määritelty.}
+- {Annot: '', ID: 42, LastEd: 0, Text: 'tunnistamaton linkitystyyppi ''{0}''; sallittuja
     tyyppejä ovat C, C++, D, Windows, Pascal ja System.'}
-- {Annot: '', ID: 43, LastEd: '', Text: 'expected one or more base classes, not ''{0}''.'}
-- {Annot: '', ID: 44, LastEd: '', Text: base classes are not allowed in forward declarations.}
-- {Annot: '', ID: 45, LastEd: '', Text: 'dil v{0}
+- {Annot: '', ID: 43, LastEd: 0, Text: 'expected one or more base classes, not ''{0}''.'}
+- {Annot: '', ID: 44, LastEd: 0, Text: base classes are not allowed in forward declarations.}
+- {Annot: '', ID: 45, LastEd: 0, Text: 'dil v{0}
 
     Copyright (c) 2007, Aziz Köksal. GPL3-lisensöity.
 
@@ -68,9 +68,9 @@
 
 
     Käännetty {2}:n versiolla {3} {4}.'}
-- {Annot: '', ID: 46, LastEd: '', Text: "Luo XML- tai HTML-dokumentti D-lähdekoodista.\n\
+- {Annot: '', ID: 46, LastEd: 0, Text: "Luo XML- tai HTML-dokumentti D-lähdekoodista.\n\
     Käyttö:\n  dil gen tiedosto.d [Valinnat]\n\nValinnat:\n  --syntax         : luo\
     \ elementtejä syntaksipuun mukaisesti\n  --xml            : käytä XML-muotoa (oletus)\n\
     \  --html           : käytä HTML-muotoa\n\nEsimerkki:\n  dil gen Parser.d --html\
     \ --syntax > Parser.html"}
-- {Annot: '', ID: 47, LastEd: '', Text: ''}
+- {Annot: '', ID: 47, LastEd: 0, Text: ''}
--- a/trunk/i18n/tr.cat	Thu Dec 20 14:48:21 2007 +0100
+++ b/trunk/i18n/tr.cat	Thu Dec 20 20:00:48 2007 +0100
@@ -1,63 +1,62 @@
 Authors:
-- [Aziz Köksal, aziz.koeksal@gmail.com]
+- {EMail: aziz.koeksal@gmail.com, Name: Aziz Köksal}
 LangCode: tr
 License: GPL3
 Messages:
-- {Annot: '', ID: 0, LastEd: '', Text: 'illegal karakter bulundu: ''{0}'''}
-- {Annot: '', ID: 1, LastEd: '', Text: geçersiz Unikod karakteri.}
-- {Annot: '', ID: 2, LastEd: '', Text: geçersiz UTF-8 serisi.}
-- {Annot: '', ID: 3, LastEd: '', Text: kapanmamış karakter sabiti.}
-- {Annot: '', ID: 4, LastEd: '', Text: boş karakter sabiti.}
-- {Annot: '', ID: 5, LastEd: '', Text: '''#'' karakter''den sonra ''line'' beklendi.'}
-- {Annot: '', ID: 6, LastEd: '', Text: '''#line''''den sonra rakam beklendi.'}
-- {Annot: '', ID: 7, LastEd: '', Text: filespec dizgisi beklendi (e.g. "yol\dosya".)}
-- {Annot: '', ID: 8, LastEd: '', Text: kapanmamış filespec dizgisi.}
-- {Annot: '', ID: 9, LastEd: '', Text: özel belirtici'den (special token) sonra yeni
+- {Annot: '', ID: 0, LastEd: 0, Text: 'illegal karakter bulundu: ''{0}'''}
+- {Annot: '', ID: 1, LastEd: 0, Text: geçersiz Unikod karakteri.}
+- {Annot: '', ID: 2, LastEd: 0, Text: geçersiz UTF-8 serisi.}
+- {Annot: '', ID: 3, LastEd: 0, Text: kapanmamış karakter sabiti.}
+- {Annot: '', ID: 4, LastEd: 0, Text: boş karakter sabiti.}
+- {Annot: '', ID: 5, LastEd: 0, Text: '''#'' karakter''den sonra ''line'' beklendi.'}
+- {Annot: '', ID: 6, LastEd: 0, Text: '''#line''''den sonra rakam beklendi.'}
+- {Annot: '', ID: 7, LastEd: 0, Text: filespec dizgisi beklendi (e.g. "yol\dosya".)}
+- {Annot: '', ID: 8, LastEd: 0, Text: kapanmamış filespec dizgisi.}
+- {Annot: '', ID: 9, LastEd: 0, Text: özel belirtici'den (special token) sonra yeni
     bir satır beklendi.}
-- {Annot: '', ID: 10, LastEd: '', Text: kapanmamış çift tırnak dizgisi.}
-- {Annot: '', ID: 11, LastEd: '', Text: 'heks sayı olmayan karakter ''{0}'' heks dizgisi
+- {Annot: '', ID: 10, LastEd: 0, Text: kapanmamış çift tırnak dizgisi.}
+- {Annot: '', ID: 11, LastEd: 0, Text: 'heks sayı olmayan karakter ''{0}'' heks dizgisi
     içinde bulundu.'}
-- {Annot: '', ID: 12, LastEd: '', Text: heks dizginin içindeki sayılar çifter çifter
+- {Annot: '', ID: 12, LastEd: 0, Text: heks dizginin içindeki sayılar çifter çifter
     olmalıdır.}
-- {Annot: '', ID: 13, LastEd: '', Text: kapanmamış heks dizgisi.}
-- {Annot: '', ID: 14, LastEd: '', Text: kapanmamış blok açıklaması (/* */).}
-- {Annot: '', ID: 15, LastEd: '', Text: kapanmamış iç içe koyulabilen açıklaması (/+
+- {Annot: '', ID: 13, LastEd: 0, Text: kapanmamış heks dizgisi.}
+- {Annot: '', ID: 14, LastEd: 0, Text: kapanmamış blok açıklaması (/* */).}
+- {Annot: '', ID: 15, LastEd: 0, Text: kapanmamış iç içe koyulabilen açıklaması (/+
     +/).}
-- {Annot: '', ID: 16, LastEd: '', Text: kapanmamış çiğ dizgisi.}
-- {Annot: '', ID: 17, LastEd: '', Text: kapanmamış ters tırnak dizgisi.}
-- {Annot: '', ID: 18, LastEd: '', Text: 'tanımlanmamış çıkış serisi ''{0}'' bulundu.'}
-- {Annot: '', ID: 19, LastEd: '', Text: 'geçersiz Unikod çıkış serisi ''{0}'' bulundu.'}
-- {Annot: '', ID: 20, LastEd: '', Text: heksadesimal çıkış serisi sayıları yeterli
+- {Annot: '', ID: 16, LastEd: 0, Text: kapanmamış çiğ dizgisi.}
+- {Annot: '', ID: 17, LastEd: 0, Text: kapanmamış ters tırnak dizgisi.}
+- {Annot: '', ID: 18, LastEd: 0, Text: 'tanımlanmamış çıkış serisi ''{0}'' bulundu.'}
+- {Annot: '', ID: 19, LastEd: 0, Text: 'geçersiz Unikod çıkış serisi ''{0}'' bulundu.'}
+- {Annot: '', ID: 20, LastEd: 0, Text: heksadesimal çıkış serisi sayıları yeterli
     değil.}
-- {Annot: '', ID: 21, LastEd: '', Text: 'tanımlanmamış HTML varlık ''{0}'''}
-- {Annot: '', ID: 22, LastEd: '', Text: 'kapanmamış HTML varlık ''{0}''.'}
-- {Annot: '', ID: 23, LastEd: '', Text: HTML varlık bir harf ile başlamalı.}
-- {Annot: '', ID: 24, LastEd: '', Text: desimal rakamın bit işareti taşdı.}
-- {Annot: '', ID: 25, LastEd: '', Text: desimal rakam taşması.}
-- {Annot: '', ID: 26, LastEd: '', Text: heksadesimal rakam taşması.}
-- {Annot: '', ID: 27, LastEd: '', Text: binari rakam taşması.}
-- {Annot: '', ID: 28, LastEd: '', Text: oktal rakam taşması.}
-- {Annot: '', ID: 29, LastEd: '', Text: float rakam taşması.}
-- {Annot: '', ID: 30, LastEd: '', Text: 8 ve 9 sayılar oktal rakamlar'da geçersizdir.}
-- {Annot: '', ID: 31, LastEd: '', Text: geçersiz heks rakam; minimum bir heks sayı
+- {Annot: '', ID: 21, LastEd: 0, Text: 'tanımlanmamış HTML varlık ''{0}'''}
+- {Annot: '', ID: 22, LastEd: 0, Text: 'kapanmamış HTML varlık ''{0}''.'}
+- {Annot: '', ID: 23, LastEd: 0, Text: HTML varlık bir harf ile başlamalı.}
+- {Annot: '', ID: 24, LastEd: 0, Text: desimal rakamın bit işareti taşdı.}
+- {Annot: '', ID: 25, LastEd: 0, Text: desimal rakam taşması.}
+- {Annot: '', ID: 26, LastEd: 0, Text: heksadesimal rakam taşması.}
+- {Annot: '', ID: 27, LastEd: 0, Text: binari rakam taşması.}
+- {Annot: '', ID: 28, LastEd: 0, Text: oktal rakam taşması.}
+- {Annot: '', ID: 29, LastEd: 0, Text: float rakam taşması.}
+- {Annot: '', ID: 30, LastEd: 0, Text: 8 ve 9 sayılar oktal rakamlar'da geçersizdir.}
+- {Annot: '', ID: 31, LastEd: 0, Text: geçersiz heks rakam; minimum bir heks sayı
+    gereklidir.}
+- {Annot: '', ID: 32, LastEd: 0, Text: geçersiz binari rakam; minimum bir binari sayı
     gereklidir.}
-- {Annot: '', ID: 32, LastEd: '', Text: geçersiz binari rakam; minimum bir binari
-    sayı gereklidir.}
-- {Annot: '', ID: 33, LastEd: '', Text: bir heksadesimal float rakamın üsü gereklidir.}
-- {Annot: '', ID: 34, LastEd: '', Text: heksadesimal float üsler desimal sayı ile
-    başlamalı.}
-- {Annot: '', ID: 35, LastEd: '', Text: üsler desimal sayı ile başlamalı.}
-- {Annot: '', ID: 36, LastEd: '', Text: '''{0}'' beklendi, ama ''{1}'' bulundu.'}
-- {Annot: '', ID: 37, LastEd: '', Text: '''{0}'' lüzumsuz.'}
-- {Annot: '', ID: 38, LastEd: '', Text: şablon tuple parametre son sırada olmalı.}
-- {Annot: '', ID: 39, LastEd: '', Text: fonksiyonun 'in' kontratı daha önceden ayrıştırılmış.}
-- {Annot: '', ID: 40, LastEd: '', Text: fonksiyonun 'out' kontratı daha önceden ayrıştırılmış.}
-- {Annot: '', ID: 41, LastEd: '', Text: bağlantı tüp (linkage type) belirtilmedi.}
-- {Annot: '', ID: 42, LastEd: '', Text: 'bilinmeyen bağlantı tüpü (linkage type) ''{0}'';
+- {Annot: '', ID: 33, LastEd: 0, Text: bir heksadesimal float rakamın üsü gereklidir.}
+- {Annot: '', ID: 34, LastEd: 0, Text: heksadesimal float üsler desimal sayı ile başlamalı.}
+- {Annot: '', ID: 35, LastEd: 0, Text: üsler desimal sayı ile başlamalı.}
+- {Annot: '', ID: 36, LastEd: 0, Text: '''{0}'' beklendi, ama ''{1}'' bulundu.'}
+- {Annot: '', ID: 37, LastEd: 0, Text: '''{0}'' lüzumsuz.'}
+- {Annot: '', ID: 38, LastEd: 0, Text: şablon tuple parametre son sırada olmalı.}
+- {Annot: '', ID: 39, LastEd: 0, Text: fonksiyonun 'in' kontratı daha önceden ayrıştırılmış.}
+- {Annot: '', ID: 40, LastEd: 0, Text: fonksiyonun 'out' kontratı daha önceden ayrıştırılmış.}
+- {Annot: '', ID: 41, LastEd: 0, Text: bağlantı tüp (linkage type) belirtilmedi.}
+- {Annot: '', ID: 42, LastEd: 0, Text: 'bilinmeyen bağlantı tüpü (linkage type) ''{0}'';
     geçerli olanlar C, C++, D, Windows, Pascal ve System.'}
-- {Annot: '', ID: 43, LastEd: '', Text: ''}
-- {Annot: '', ID: 44, LastEd: '', Text: ''}
-- {Annot: '', ID: 45, LastEd: '', Text: 'dil v{0}
+- {Annot: '', ID: 43, LastEd: 0, Text: ''}
+- {Annot: '', ID: 44, LastEd: 0, Text: ''}
+- {Annot: '', ID: 45, LastEd: 0, Text: 'dil v{0}
 
     Copyright (c) 2007, Aziz Köksal. Lisans GPL3.
 
@@ -66,9 +65,9 @@
 
 
     Bu yazılım {2} v{3} ile {4} tarihinde derletilmiş.'}
-- {Annot: '', ID: 46, LastEd: '', Text: "Bir D kaynak kodundan XML veya HTML dosyası\
+- {Annot: '', ID: 46, LastEd: 0, Text: "Bir D kaynak kodundan XML veya HTML dosyası\
     \ oluştur.\nKullanım:\n  dil gen dosya.d [Seçenekler]\n\nSeçenekler:\n  --syntax\
     \         : söz dizimi için etiketler yazdır\n  --xml            : XML biçimi\
     \ kullan (varsayılır)\n  --html           : HTML biçimi kullan\n\nÖrnek:\n  dil\
     \ gen Parser.d --html --syntax > Parser.html"}
-- {Annot: '', ID: 47, LastEd: '', Text: ''}
+- {Annot: '', ID: 47, LastEd: 0, Text: ''}
--- a/trunk/src/translator/langfile.py	Thu Dec 20 14:48:21 2007 +0100
+++ b/trunk/src/translator/langfile.py	Thu Dec 20 20:00:48 2007 +0100
@@ -43,14 +43,13 @@
 
     authors = []
     for author in self.authors:
-      author = list(author)
-      author_len = len(author)
-      if author_len == 0:
-        pass
-      elif author_len == 1:
-        authors += [unicode(author[0]), ""]
-      else:
-        authors += [unicode(author[0]), unicode(author[1])]
+      self.checkType(author, dict, "LangFile: author must be of type dict.")
+      try:
+        author["Name"] = unicode(author["Name"])
+        author["EMail"] = str(author["EMail"])
+        authors += [author]
+      except KeyError, e:
+        raise LoadingError("Author is missing '%s' in '%s'" % (e.message, filePath))
     self.authors = authors
 
     self.msgDict = {} # {ID : msg, ...}
@@ -60,7 +59,7 @@
         msg["ID"] = int(msg["ID"])
         msg["Text"] = unicode(msg["Text"])
         msg["Annot"] = unicode(msg["Annot"])
-        msg["LastEd"] = unicode(msg["LastEd"])
+        msg["LastEd"] = int(msg["LastEd"])
       except KeyError, e:
         raise LoadingError("LangFile: a message is missing the '%s' key." % str(e))
       self.msgDict[msg["ID"]] = msg
@@ -89,10 +88,22 @@
     return {"ID":ID,"Text":"","Annot":"","LastEd":""}
 
   def save(self):
+    self.doc["LangCode"] = self.langCode
+    self.doc["License"] = self.license
+    self.doc["Authors"] = self.authors
     langFile = open(self.filePath, "w")
     yaml.dump(self.doc, stream=langFile, allow_unicode=True)
     langFile.close()
 
+  def setLangCode(self, langCode):
+    self.langCode = langCode
+
+  def setLicense(self, license):
+    self.license = license
+
+  def setAuthors(self, authors):
+    self.authors = authors
+
   def getFileName(self):
     from os import path
     return path.basename(self.filePath)
--- a/trunk/src/translator/translator.py	Thu Dec 20 14:48:21 2007 +0100
+++ b/trunk/src/translator/translator.py	Thu Dec 20 20:00:48 2007 +0100
@@ -47,7 +47,7 @@
     self.setCentralWidget(self.pages)
     self.disableMenuItems()
     self.projectDock = QtGui.QDockWidget("Project", self)
-    self.projectTree = ProjectTree(self.projectDock)
+    self.projectTree = ProjectTree(self.projectDock, self)
     self.projectDock.setWidget(self.projectTree)
     self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, self.projectDock)
     # Custom connections
@@ -300,21 +300,6 @@
     yaml.dump(g_settings, open(g_settingsFile, "w")) #default_flow_style=False
 
 
-class MessageItem(QtGui.QTreeWidgetItem):
-  def __init__(self, msg):
-    QtGui.QTreeWidgetItem.__init__(self, [str(msg["ID"]), msg["Text"]])
-    self.msg = msg
-
-  def getID(self):
-    return self.msg["ID"]
-
-  def setMsgText(self, text):
-    self.msg["Text"] = text
-
-  def setMsgAnnot(self, text):
-    self.msg["Annot"] = text
-
-
 class Document(QtGui.QWidget):
   def __init__(self):
     QtGui.QWidget.__init__(self)
@@ -344,6 +329,22 @@
   def getDocumentFullPath(self):
     return self.documentFullPath
 
+
+class MessageItem(QtGui.QTreeWidgetItem):
+  def __init__(self, msg):
+    QtGui.QTreeWidgetItem.__init__(self, [str(msg["ID"]), msg["Text"], "Done"])
+    self.msg = msg
+
+  def getID(self):
+    return self.msg["ID"]
+
+  def setMsgText(self, text):
+    self.msg["Text"] = text
+
+  def setMsgAnnot(self, text):
+    self.msg["Annot"] = text
+
+
 class MsgForm(Document, Ui_MsgForm):
   def __init__(self, langFile):
     Document.__init__(self)
@@ -356,10 +357,15 @@
     self.currentItem = None
     self.colID = 0
     self.colText = 1
+    #self.colStat = 2
+    #self.treeWidget.setColumnCount(3)
     self.treeWidget.setColumnCount(2)
-    self.treeWidget.setHeaderLabels(["ID", "Text"])
+    self.treeWidget.setHeaderLabels(["ID", "Text"]) #, "Status"
+    self.msgItemDict = {} # Maps msg IDs to msg items.
     for msg in self.langFile.messages:
-      self.treeWidget.addTopLevelItem(MessageItem(msg))
+      item = MessageItem(msg)
+      self.msgItemDict[msg["ID"]] = item
+      self.treeWidget.addTopLevelItem(item)
 
     Qt.connect(self.treeWidget, Qt.SIGNAL("currentItemChanged (QTreeWidgetItem *,QTreeWidgetItem *)"), self.treeItemChanged)
     Qt.connect(self.translEdit, Qt.SIGNAL("textChanged()"), self.translEditTextChanged)
@@ -367,6 +373,10 @@
 
     #self.translEdit.focusOutEvent = self.translEditFocusOut
 
+  def sourceMsgChanged(self, msg):
+    # TODO:
+    pass
+
   def treeItemChanged(self, current, previous):
     if current == None:
       self.setTranslMsg("")
@@ -495,8 +505,9 @@
     self.setFlags(self.flags()|Qt.ItemIsEditable);
 
 class ProjectTree(QtGui.QTreeWidget):
-  def __init__(self, parent):
+  def __init__(self, parent, mainWindow):
     QtGui.QTreeWidget.__init__(self, parent)
+    self.mainWindow = mainWindow
     self.project = None
     self.topItem = None
     self.msgIDsItem = None
@@ -551,7 +562,12 @@
     func_map[type(item)](item)
 
   def showMenuProjectItem(self, item):
-    print "ProjectItem"
+    mousePos = QtGui.QCursor.pos()
+    menu = QtGui.QMenu()
+    actions = {}
+    actions[menu.addAction("Build")] = lambda: None
+    actions[menu.addAction("Properties")] = lambda: self.mainWindow.showProjectProperties()
+    actions[menu.exec_(mousePos)]()
 
   def showMenuLangFileItem(self, item):
     print "LangFileItem"