WXK_MBUTTON,
   WXK_CLEAR,
   WXK_SHIFT,
+  WXK_ALT,
   WXK_CONTROL,
   WXK_MENU,
   WXK_PAUSE,
 
 #: ../src/common/date.cpp:385 ../src/common/date.cpp:400
 #: src/common/date.cpp:384 src/common/date.cpp:399
 msgid " B.C."
-msgstr " B.C."
+msgstr " v.Chr."
 
 #: ../src/common/resourc2.cpp:265 ../src/common/resourc2.cpp:1334
 #: ../src/common/resource.cpp:1630 ../src/common/resource.cpp:2704
 
     void OnChar(wxKeyEvent& event);
 
 private:
-    static inline char GetChar(bool on, char c) { return on ? c : '-'; }
-    void LogEvent(const char *name, wxKeyEvent& event) const;
+    static inline wxChar GetChar(bool on, wxChar c) { return on ? c : _T('-'); }
+    void LogEvent(const wxChar *name, wxKeyEvent& event) const;
 
     DECLARE_EVENT_TABLE()
 };
     EVT_CHAR(MyTextCtrl::OnChar)
 END_EVENT_TABLE()
 
-void MyTextCtrl::LogEvent(const char *name, wxKeyEvent& event) const
+void MyTextCtrl::LogEvent(const wxChar *name, wxKeyEvent& event) const
 {
     wxString key;
     long keycode = event.KeyCode();
-    if ( isprint((int)keycode) )
-        key.Printf("'%c'", (char)keycode);
+    if ( wxIsprint((int)keycode) )
+        key.Printf( _T("'%c'") , (char)keycode);
     else
     {
         switch ( keycode )
             case WXK_MBUTTON: key = "MBUTTON"; break;
             case WXK_CLEAR: key = "CLEAR"; break;
             case WXK_SHIFT: key = "SHIFT"; break;
+            case WXK_ALT: key = "ALT"; break;
             case WXK_CONTROL: key = "CONTROL"; break;
             case WXK_MENU: key = "MENU"; break;
             case WXK_PAUSE: key = "PAUSE"; break;
             case WXK_NUMPAD_DECIMAL: key = "NUMPAD_DECIMAL"; break;
 
             default:
-                key.Printf("unknown (%ld)", keycode);
+                key.Printf( _T("unknown (%ld)"), keycode);
         }
     }
 
     wxLogMessage( _T("%s event: %s (flags = %c%c%c%c)"),
                   name,
                   key.c_str(),
-                  GetChar(event.ControlDown(), 'C'),
-                  GetChar(event.AltDown(), 'A'),
-                  GetChar(event.ShiftDown(), 'S'),
-                  GetChar(event.MetaDown(), 'M'));
+                  GetChar( event.ControlDown(), _T('C') ),
+                  GetChar( event.AltDown(), _T('A') ),
+                  GetChar( event.ShiftDown(), _T('S') ),
+                  GetChar( event.MetaDown(), _T('M') ) );
 
 }
 
 void MyTextCtrl::OnChar(wxKeyEvent& event)
 {
-    LogEvent("Char", event);
+    LogEvent( _T("Char"), event);
 
     event.Skip();
 }
 
 void MyTextCtrl::OnKeyUp(wxKeyEvent& event)
 {
-    LogEvent("Key up", event);
+    LogEvent( _("Key up"), event);
 
     event.Skip();
 }
             break;
     }
 
-    LogEvent("Key down", event);
+    LogEvent( _("Key down"), event);
 
     event.Skip();
 }
 
 bool
 wxProgressDialog::Update(int value, const wxString& newmsg)
 {
-   wxASSERT_MSG( value == -1 || m_gauge, "can't update non existent dialog" );
-   wxASSERT_MSG( value < m_maximum, "invalid progress value" );
+   wxASSERT_MSG( value == -1 || m_gauge, _T("can't update non existent dialog") );
+   wxASSERT_MSG( value < m_maximum, _T("invalid progress value") );
 
    if( m_gauge )
       m_gauge->SetValue(value + 1);
 
 
 void wxapp_install_idle_handler()
 {
-    wxASSERT_MSG( wxTheApp->m_idleTag == 0, "attempt to install idle handler twice" );
+    wxASSERT_MSG( wxTheApp->m_idleTag == 0, _T("attempt to install idle handler twice") );
 
     /* this routine gets called by all event handlers
        indicating that the idle is over. */
 
     m_owner = (wxWindow *)NULL;
     m_isMemDC = FALSE;
   
-    wxASSERT_MSG( window, "DC needs a window" );
+    wxASSERT_MSG( window, _T("DC needs a window") );
     
     GtkWidget *widget = window->m_wxwindow;
     
-    wxASSERT_MSG( widget, "DC needs a widget" );
+    wxASSERT_MSG( widget, _T("DC needs a widget") );
     
     m_window = widget->window;
     
 #endif
         default:
        {
-          wxFAIL_MSG( "unsupported logical function" );
+          wxFAIL_MSG( _T("unsupported logical function") );
           break;
        }
     }
 
         case GDK_Shift_R:       key_code = WXK_SHIFT;       break;
         case GDK_Control_L:
         case GDK_Control_R:     key_code = WXK_CONTROL;     break;
+       case GDK_Meta_L:
+       case GDK_Meta_R:
+       case GDK_Alt_L:
+       case GDK_Alt_R:
+       case GDK_Super_L:
+       case GDK_Super_R:       key_code = WXK_ALT;         break;
         case GDK_Menu:          key_code = WXK_MENU;        break;
         case GDK_Help:          key_code = WXK_HELP;        break;
         case GDK_BackSpace:     key_code = WXK_BACK;        break;
 
 
 void wxapp_install_idle_handler()
 {
-    wxASSERT_MSG( wxTheApp->m_idleTag == 0, "attempt to install idle handler twice" );
+    wxASSERT_MSG( wxTheApp->m_idleTag == 0, _T("attempt to install idle handler twice") );
 
     /* this routine gets called by all event handlers
        indicating that the idle is over. */
 
     m_owner = (wxWindow *)NULL;
     m_isMemDC = FALSE;
   
-    wxASSERT_MSG( window, "DC needs a window" );
+    wxASSERT_MSG( window, _T("DC needs a window") );
     
     GtkWidget *widget = window->m_wxwindow;
     
-    wxASSERT_MSG( widget, "DC needs a widget" );
+    wxASSERT_MSG( widget, _T("DC needs a widget") );
     
     m_window = widget->window;
     
 #endif
         default:
        {
-          wxFAIL_MSG( "unsupported logical function" );
+          wxFAIL_MSG( _T("unsupported logical function") );
           break;
        }
     }
 
         case GDK_Shift_R:       key_code = WXK_SHIFT;       break;
         case GDK_Control_L:
         case GDK_Control_R:     key_code = WXK_CONTROL;     break;
+       case GDK_Meta_L:
+       case GDK_Meta_R:
+       case GDK_Alt_L:
+       case GDK_Alt_R:
+       case GDK_Super_L:
+       case GDK_Super_R:       key_code = WXK_ALT;         break;
         case GDK_Menu:          key_code = WXK_MENU;        break;
         case GDK_Help:          key_code = WXK_HELP;        break;
         case GDK_BackSpace:     key_code = WXK_BACK;        break;