Index: trunk/tmdmcreator/src/main.cpp
===================================================================
--- trunk/tmdmcreator/src/main.cpp	(revision 19)
+++ trunk/tmdmcreator/src/main.cpp	(revision 21)
@@ -35,6 +35,7 @@
         wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
     { wxCMD_LINE_SWITCH, "v", "verbose", "Be more verbose" },
-    { wxCMD_LINE_SWITCH, "t", "toolmap", "toolmap output" },
-    { wxCMD_LINE_SWITCH, "o", "overwrite", "overwrite output" },    
+    { wxCMD_LINE_SWITCH, "t", "toolmap", "toolmap output (default is SQL)" },
+    { wxCMD_LINE_SWITCH, "o", "overwrite", "overwrite output" },
+    { wxCMD_LINE_OPTION, "l", "language", "language column (default is 0)", wxCMD_LINE_VAL_NUMBER, wxCMD_LINE_PARAM_OPTIONAL},
     { wxCMD_LINE_PARAM, NULL, NULL, "[base structure sql file]"},
     { wxCMD_LINE_PARAM, NULL, NULL, "[user structure sql file]"},
@@ -83,4 +84,8 @@
     bool bVerbose = parser.Found("verbose");
     bool bToolMap = parser.Found("toolmap");
+    long myLanguage = 0;
+    if(parser.Found("language", &myLanguage) == true) {
+        wxPrintf(_("Using language column: %ld\n"), myLanguage);
+    }
     if (parser.Found("overwrite") && wxFileExists(parser.GetParam(3))) {
         wxRemoveFile(parser.GetParam(3));
@@ -108,5 +113,5 @@
     }
     
-    if (myCreator.ProcessFiles(myErrors) == false) {
+    if (myCreator.ProcessFiles(myErrors, myLanguage) == false) {
         if (bVerbose == true) {
             PrintArray(myErrors);
Index: trunk/tmdmcreator/src/tmdmcreator.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmcreator.cpp	(revision 19)
+++ trunk/tmdmcreator/src/tmdmcreator.cpp	(revision 21)
@@ -91,5 +91,5 @@
 
 
-bool TmDmCreator::ProcessFiles(wxArrayString & errorsmsg) {
+bool TmDmCreator::ProcessFiles(wxArrayString & errorsmsg, int languagecolumn) {
     errorsmsg.Clear();
     // Copy structure
@@ -109,4 +109,5 @@
     // Process layers
     TmDmProcessorSimple myProc(m_FileNameUserContent, m_FileNameOutSQL);
+    myProc.SetLanguageColumn(languagecolumn);
     int myThematicLayersStart = myProc.FindBlock(_T("thematic_layers"));
     if (myThematicLayersStart == wxNOT_FOUND) {
@@ -132,4 +133,5 @@
     // Process attributs
     TmDmProcessorAttributs myProcAttributs (m_FileNameUserContent, m_FileNameOutSQL);
+    myProcAttributs.SetLanguageColumn(languagecolumn);
     int myAttributStart = myProcAttributs.FindBlock(_T("attributs"));
     if (myAttributStart == wxNOT_FOUND) {
Index: trunk/tmdmcreator/src/tmdmcreator.h
===================================================================
--- trunk/tmdmcreator/src/tmdmcreator.h	(revision 19)
+++ trunk/tmdmcreator/src/tmdmcreator.h	(revision 21)
@@ -42,5 +42,5 @@
     
     bool CheckFiles(wxArrayString & errormsg);
-    bool ProcessFiles(wxArrayString & errorsmsg);    
+    bool ProcessFiles(wxArrayString & errorsmsg, int languagecolumn);
 };
 #endif
Index: trunk/tmdmcreator/src/tmdmprocessor.cpp
===================================================================
--- trunk/tmdmcreator/src/tmdmprocessor.cpp	(revision 19)
+++ trunk/tmdmcreator/src/tmdmprocessor.cpp	(revision 21)
@@ -21,4 +21,5 @@
     m_FileSrc = src;
     m_FileDst = dest;
+    m_LanguageCol = 0;
 }
 
@@ -42,4 +43,29 @@
     }
     return wxNOT_FOUND;
+}
+
+
+
+wxString TmDmProcessor::SwitchCols(wxArrayString * cols, wxArrayString * values, int item) {
+    if (m_LanguageCol == 0) {
+        return values->Item(item);
+    }
+    
+
+    if(cols->Item(item).Contains(_T("_0")) == true) {
+        return values->Item(item + m_LanguageCol);
+    }
+    
+    wxString myColName = wxString::Format(_T("_%d"), m_LanguageCol);
+    if (cols->Item(item).Contains(myColName) == true) {
+        return values->Item(item - m_LanguageCol);
+    }
+    return values->Item(item);
+}
+
+
+
+void TmDmProcessor::SetLanguageColumn(int value) {
+    m_LanguageCol = value;
 }
 
@@ -104,5 +130,5 @@
         myInsert.Append(_T(") VALUES ("));
         for (unsigned int i = 0; i< mySQLCols.GetCount(); i++) {
-            myInsert.Append(wxString::Format(_T("\"%s\","), myValues.Item(i)));
+            myInsert.Append(wxString::Format(_T("\"%s\","), SwitchCols(&mySQLCols, &myValues, i)));
         }
         myInsert.RemoveLast();
@@ -232,5 +258,5 @@
         wxString myInsert = _T("INSERT INTO `dmn_catalog` VALUES (");
         for (unsigned int i = START_COL; i< mySQLCols.GetCount(); i++) {
-            myInsert.Append(wxString::Format(_T("\"%s\","), myValues.Item(i)));
+            myInsert.Append(wxString::Format(_T("\"%s\","), SwitchCols(&mySQLCols, &myValues, i)));
         }
         myInsert.RemoveLast();
Index: trunk/tmdmcreator/src/tmdmprocessor.h
===================================================================
--- trunk/tmdmcreator/src/tmdmprocessor.h	(revision 19)
+++ trunk/tmdmcreator/src/tmdmprocessor.h	(revision 21)
@@ -33,4 +33,7 @@
     wxFileName m_FileDst;
     
+    int m_LanguageCol;
+    wxString SwitchCols(wxArrayString * cols, wxArrayString * values, int item);
+    
 public:
     TmDmProcessor(const wxFileName & src, const wxFileName & dest);
@@ -39,4 +42,6 @@
     int FindBlock(const wxString & blockname);
     virtual bool ProcessBlock(int blockstart, const wxString & tablename) = 0;
+
+    void SetLanguageColumn(int value);
 };
 
