/******************************************************************************
 *
 * 
 *
 * Copyright (C) 1997-2000 by Dimitri van Heesch.
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation under the terms of the GNU General Public License is hereby 
 * granted. No representations are made about the suitability of this software 
 * for any purpose. It is provided "as is" without express or implied warranty.
 * See the GNU General Public License for more details.
 *
 * Documents produced by Doxygen are derivative works derived from the
 * input used in their production; they are not affected by this license.
 *
 */

#ifndef TRANSLATOR_CZ_H
#define TRANSLATOR_CZ_H

#include "translator.h"

// The translation from English to Czech by Vlastimil Havran.
// In the cases where are more translations possible I hope
// that I have selected the most reasonable text. If not, please,
// mail the comments and text proposals to
//
// havran@fel.cvut.cz, 1999/04/11
//
// Updates:
// --------
// 2000/06/20 
//  - The prototype version of Czech strings with diacritics implemented by
//    Petr Prikryl (prikrylp@skil.cz).  (Vlastimil Havran is still
//    the maintainer.)  The translation was based on translator.h
//    of Doxygen versison 1.1.4 (from scratch).
//
// 2000/07/10 (Petr Prikryl)
//  - Updated version based on 1.1.5 sources (including important updates
//    of the up-to-1.1.4 strings). Czech strings this file were written
//    in windows-1250 encoding. On-line decoding into iso-8859-2 ensured
//    via conditional compilation if the sources are compiled under UNIX.
//
// 2000/07/19 (Petr Prikryl)
//  - Encoding conversion tables moved to the methods that use them.
//  - Updates for "new since 1.1.5".
//
// 2000/08/02 (Petr Prikryl)
//  - Updated for 1.2.0
//
// Notices:
// -------- 
// The conditional compilation ensures or the neutral functionality
// of the macro DECODE, or calling the WinToISO() method for
// on-line encoding conversion. If you want to maintain the source
// in the iso-8859-2, do convert the source, change the conditional
// definition of the DECODE macro using the method ISOToWin() --
// for conversion of strings for the Windows version. The version
// which does not call the function is slightly faster.
//
// Only one of the private method WinToISO() and ISOToWin() is
// necessary depending on whether this source is maintained in
// windows-1250 or iso-8859-2 encoding.  However, there is not a
// big loose of space when both methods with the conversion tables
// are supported. The other (not used now) may be handy in future.
// Do not erase it.


// Here the DECODE macro assumes the source written in Windows encoding.
//
#ifdef _WIN32
  #define DECODE(sInput) sInput
#else
  #define DECODE(sInput) WinToISO(sInput)
#endif


class TranslatorCzech : public Translator
{
  private:
    /*! returns the string converted from windows-1250 to iso-8859-2 */
    QCString WinToISO(const QCString sInput)
    {
      // The conversion table for characters >127
      // 
      static const char WinToISOTab[] = {
        '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
        '\x88', '\x89', '\xA9', '\x8B', '\xA6', '\xAB', '\xAE', '\xAC',
        '\x90', '\x91', '\x92', '\x93', '\x94', '\x2E', '\x96', '\x97',
        '\x98', '\x99', '\xB9', '\x9B', '\xB6', '\xBB', '\xBE', '\xBC',
        '\xA0', '\x20', '\x20', '\xA3', '\xA4', '\xA1', '\xA6', '\xA7',
        '\x22', '\xA9', '\xAA', '\x3C', '\xAC', '\x2D', '\xAE', '\xAF',
        '\x2E', '\x2B', '\x20', '\xB3', '\x27', '\x75', '\xB6', '\xB7',
        '\x20', '\xB1', '\xBA', '\x3E', '\xA5', '\x22', '\xB5', '\xBF',
        '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
        '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
        '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
        '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
        '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
        '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
        '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\x2D',
        '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
        '\0'
      };
      
      QCString result;
      int len = sInput.length();

      for (int i = 0; i < len; ++i)
      {
        unsigned int c = sInput[i];  
        result += (c > 127) ? WinToISOTab[c & 0x7F] : c;
      }
      return result;
    }
    
    /*! returns the string converted from iso-8859-2 to windows-1250 */
    QCString ISOToWin(const QCString sInput)
    {
      // The conversion table for characters >127
      // 
      static const char ISOToWinTab[] = {
        '\x80', '\x81', '\x82', '\x83', '\x84', '\x85', '\x86', '\x87',
        '\x88', '\x89', '\x8A', '\x8B', '\x8C', '\x8D', '\x8E', '\x8F',
        '\x90', '\x91', '\x92', '\x93', '\x94', '\x95', '\x96', '\x97',
        '\x98', '\x99', '\x9A', '\x9B', '\x9C', '\x9D', '\x9E', '\x9F',
        '\xA0', '\xA5', '\xA2', '\xA3', '\xA4', '\xBC', '\x8C', '\xA7',
        '\xA8', '\x8A', '\xAA', '\x8D', '\x8F', '\xAD', '\x8E', '\xAF',
        '\xB0', '\xB9', '\xB2', '\xB3', '\xB4', '\xBE', '\x9C', '\xB7',
        '\xB8', '\x9A', '\xBA', '\x9D', '\x9F', '\xBD', '\x9E', '\xBF',
        '\xC0', '\xC1', '\xC2', '\xC3', '\xC4', '\xC5', '\xC6', '\xC7',
        '\xC8', '\xC9', '\xCA', '\xCB', '\xCC', '\xCD', '\xCE', '\xCF',
        '\xD0', '\xD1', '\xD2', '\xD3', '\xD4', '\xD5', '\xD6', '\xD7',
        '\xD8', '\xD9', '\xDA', '\xDB', '\xDC', '\xDD', '\xDE', '\xDF',
        '\xE0', '\xE1', '\xE2', '\xE3', '\xE4', '\xE5', '\xE6', '\xE7',
        '\xE8', '\xE9', '\xEA', '\xEB', '\xEC', '\xED', '\xEE', '\xEF',
        '\xF0', '\xF1', '\xF2', '\xF3', '\xF4', '\xF5', '\xF6', '\xF7',
        '\xF8', '\xF9', '\xFA', '\xFB', '\xFC', '\xFD', '\xFE', '\xFF',
        '\0'
      };
      QCString result;
      int len = sInput.length();

      for (int i = 0; i < len; ++i)
      {
        unsigned int c = sInput[i];  
        result += (c > 127) ? ISOToWinTab[c & 0x7F] : c;
      }
      return result;
    }
    
  public:
    // --- Language contol methods -------------------

    virtual QCString idLanguage()
    { return "czech"; }

    virtual QCString latexLanguageSupportCommand()
    { return "\\usepackage{czech}\n"; }
    
    /*! returns the name of the package that is included by LaTeX */
    virtual QCString latexBabelPackage() 
    { return ""; }

    /*! return the language charset. This will be used for the HTML output */
    virtual QCString idLanguageCharset()
    {
#ifdef _WIN32
        return "windows-1250";
#else
        return "iso-8859-2";
#endif
    }

    // --- Language translation methods -------------------

    /*! used in the compound documentation before a list of related functions. */
    virtual QCString trRelatedFunctions()
    { return DECODE("Související funkce"); }

    /*! subscript for the related functions. */
    virtual QCString trRelatedSubscript()
    { return DECODE("(Uvedené funkce nejsou členskými funkcemi.)"); }

    /*! header that is put before the detailed description of files, classes and namespaces. */
    virtual QCString trDetailedDescription()
    { return DECODE("Detailní popis"); }

    /*! header that is put before the list of typedefs. */
    virtual QCString trMemberTypedefDocumentation()
    { return DECODE("Dokumentace k členských typům"); }
    
    /*! header that is put before the list of enumerations. */
    virtual QCString trMemberEnumerationDocumentation()
    { return DECODE("Dokumentace k členským výčtům"); }
    
    /*! header that is put before the list of member functions. */
    virtual QCString trMemberFunctionDocumentation()
    { return DECODE("Dokumentace k metodám"); }
    
    /*! header that is put before the list of member attributes. */
    virtual QCString trMemberDataDocumentation()
    { return DECODE("Dokumentace k datovým členům"); }

    /*! this is the text of a link put after brief descriptions. */
    virtual QCString trMore() 
    { return DECODE("(...)"); }

    /*! put in the class documentation */
    virtual QCString trListOfAllMembers()
    { return DECODE("Seznam všech členů."); }

    /*! used as the title of the "list of all members" page of a class */
    virtual QCString trMemberList()
    { return DECODE("Seznam členů třídy"); }

    /*! this is the first part of a sentence that is followed by a class name */
    virtual QCString trThisIsTheListOfAllMembers()
    { return DECODE("Zde naleznete úplný seznam členů třídy "); }

    /*! this is the remainder of the sentence after the class name */
    virtual QCString trIncludingInheritedMembers()
    { return DECODE(", včetně všech zděděných členů."); }
    
    /*! this is put at the author sections at the bottom of man pages.
     *  parameter s is name of the project name.
     */
    virtual QCString trGeneratedAutomatically(const char *s)
    { QCString result="Generováno automaticky programem Doxygen "
                      "ze zdrojových textů";
      if (s) result+=(QCString)" projektu "+s;
      result+="."; 
      return DECODE(result);
    }

    /*! put after an enum name in the list of all members */
    virtual QCString trEnumName()
    { return DECODE("jméno výčtu"); }
    
    /*! put after an enum value in the list of all members */
    virtual QCString trEnumValue()
    { return DECODE("hodnota výčtu"); }
    
    /*! put after an undocumented member in the list of all members */
    virtual QCString trDefinedIn()
    { return DECODE("definován v"); }

    /*! put as in introduction in the verbatim header file of a class.
     *  parameter f is the name of the include file.
     */
    virtual QCString trVerbatimText(const char *f)
    { return DECODE((QCString)"Úplný text vkládaného souboru "+f+"."); }
    
    // quick reference sections

    /*! This is put above each page as a link to the list of all groups of 
     *  compounds or files (see the \group command).
     */
    virtual QCString trModules()
    { return DECODE("Moduly"); }
    
    /*! This is put above each page as a link to the class hierarchy */
    virtual QCString trClassHierarchy()
    { return DECODE("Hierarchie tříd"); }
    
    /*! This is put above each page as a link to the list of annotated classes */
    virtual QCString trCompoundList()
    { return DECODE("Seznam tříd"); }
    
    /*! This is put above each page as a link to the list of documented files */
    virtual QCString trFileList()
    { return DECODE("Seznam souborů"); }

    /*! This is put above each page as a link to the list of all verbatim headers */
    virtual QCString trHeaderFiles()
    { return DECODE("Seznam hlavičkových souborů"); }

    /*! This is put above each page as a link to all members of compounds. */
    virtual QCString trCompoundMembers()
    { return DECODE("Seznam členů tříd"); }

    /*! This is put above each page as a link to all members of files. */
    virtual QCString trFileMembers()
    { return DECODE("Symboly v souborech"); }

    /*! This is put above each page as a link to all related pages. */
    virtual QCString trRelatedPages()
    { return DECODE("Související stránky"); }

    /*! This is put above each page as a link to all examples. */
    virtual QCString trExamples()
    { return DECODE("Příklady"); }

    /*! This is put above each page as a link to the search engine. */
    virtual QCString trSearch()
    { return DECODE("Hledat"); }

    /*! This is an introduction to the class hierarchy. */
    virtual QCString trClassHierarchyDescription()
    { return DECODE("Zde naleznete seznam, vyjadřující vztah dědičnosti tříd. "
             "Je seřazen přibližně (ale ne úplně) podle abecedy:");
    }

    /*! This is an introduction to the list with all files. */
    virtual QCString trFileListDescription(bool extractAll)
    {
      QCString result="Zde naleznete seznam všech ";
      if (!extractAll) result+="dokumentovaných ";
      result+="souborů se stručnými popisy:";
      return DECODE(result);
    }

    /*! This is an introduction to the annotated compound list. */
    virtual QCString trCompoundListDescription()
    { return DECODE("Následující seznam obsahuje především identifikace tříd, "
             "ale nachází se zde i další netriviální prvky, jako jsou "
             "struktury (struct), unie (union) a rozhraní (interface). "
             "V seznamu jsou uvedeny jejich stručné popisy:"); 
    }

    /*! This is an introduction to the page with all class members. */
    virtual QCString trCompoundMembersDescription(bool extractAll)
    {
      QCString result="Zde naleznete seznam všech ";
      if (!extractAll) result+="dokumentovaných ";
      result+="členů tříd s odkazy na ";
      if (extractAll) 
        result+="dokumentaci tříd, ke kterým příslušejí:";
      else 
        result+="třídy, ke kterým příslušejí:";
      return DECODE(result);
    }

    /*! This is an introduction to the page with all file members. */
    virtual QCString trFileMembersDescription(bool extractAll)
    {
      QCString result="Zde naleznete seznam všech ";
      if (!extractAll) result+="dokumentovaných ";
      result+="symbolů, které jsou definovány na úrovni svých souborů. "
              "Pro každý symbol je uveden odkaz na ";
      if (extractAll) 
        result+="dokumentaci příslušného souboru";
      else 
        result+="soubor, ve kterém je symbol definován";
      result+=". Podle způsobu definice může být symbol globálním symbolem "
              "nebo symbolem, který je viditelný pouze z daného souboru "
              "(to se týká například statických proměnných v C++). "
              "Seznam neobsahuje symboly členů tříd. "
              "Symbol může označovat makro, typ, instanci třídy, "
              "proměnnou, konstantu, funkci, výčet, hodnotu výčtu a podobně:";  
        
      return DECODE(result);
    }

    /*! This is an introduction to the page with the list of all header files. */
    virtual QCString trHeaderFilesDescription()
    { return DECODE("Zde naleznete hlavičkové soubory, které tvoří "
             "aplikační programátorské rozhraní (API):"); }

    /*! This is an introduction to the page with the list of all examples */
    virtual QCString trExamplesDescription()
    { return DECODE("Zde naleznete seznam všech příkladů:"); }

    /*! This is an introduction to the page with the list of related pages */
    virtual QCString trRelatedPagesDescription()
    { return DECODE("Zde naleznete seznam všech souvisejících stránek "
                    "dokumentace:"); }

    /*! This is an introduction to the page with the list of class/file groups */
    virtual QCString trModulesDescription()
    { return DECODE("Zde naleznete seznam všech modulů:"); }

    /*! This sentences is used in the annotated class/file lists if no brief
     * description is given. 
     */
    virtual QCString trNoDescriptionAvailable()
    { return DECODE("Popis není k dispozici"); }
    
    // index titles (the project name is prepended for these) 


    /*! This is used in HTML as the title of index.html. */
    virtual QCString trDocumentation()
    { return DECODE("Dokumentace"); }

    /*! This is used in LaTeX as the title of the chapter with the 
     * index of all groups.
     */
    virtual QCString trModuleIndex()
    { return DECODE("Rejstřík modulů"); }

    /*! This is used in LaTeX as the title of the chapter with the 
     * class hierarchy.
     */
    virtual QCString trHierarchicalIndex()
    { return DECODE("Rejstřík hierarchie tříd"); }

    /*! This is used in LaTeX as the title of the chapter with the 
     * annotated compound index.
     */
    virtual QCString trCompoundIndex()
    { return DECODE("Rejstřík tříd"); }

    /*! This is used in LaTeX as the title of the chapter with the
     * list of all files.
     */
    virtual QCString trFileIndex() 
    { return DECODE("Rejstřík souborů"); }

    /*! This is used in LaTeX as the title of the chapter containing
     *  the documentation of all groups.
     */
    virtual QCString trModuleDocumentation()
    { return DECODE("Dokumentace modulů"); }

    /*! This is used in LaTeX as the title of the chapter containing
     *  the documentation of all classes, structs and unions.
     */
    virtual QCString trClassDocumentation()
    { return DECODE("Dokumentace tříd"); }

    /*! This is used in LaTeX as the title of the chapter containing
     *  the documentation of all files.
     */
    virtual QCString trFileDocumentation()
    { return DECODE("Dokumentace souborů"); }

    /*! This is used in LaTeX as the title of the chapter containing
     *  the documentation of all examples.
     */
    virtual QCString trExampleDocumentation()
    { return DECODE("Dokumentace příkladů"); }

    /*! This is used in LaTeX as the title of the chapter containing
     *  the documentation of all related pages.
     */
    virtual QCString trPageDocumentation()
    { return DECODE("Dokumentace souvisejících stránek"); }

    /*! This is used in LaTeX as the title of the document */
    virtual QCString trReferenceManual()
    { return DECODE("Referenční příručka"); }
    
    /*! This is used in the documentation of a file as a header before the 
     *  list of defines
     */
    virtual QCString trDefines()
    { return DECODE("Definice maker"); }

    /*! This is used in the documentation of a file as a header before the 
     *  list of function prototypes
     */
    virtual QCString trFuncProtos()
    { return DECODE("Prototypy"); }

    /*! This is used in the documentation of a file as a header before the 
     *  list of typedefs
     */
    virtual QCString trTypedefs()
    { return DECODE("Definice typů"); }

    /*! This is used in the documentation of a file as a header before the 
     *  list of enumerations
     */
    virtual QCString trEnumerations()
    { return DECODE("Výčty"); }

    /*! This is used in the documentation of a file as a header before the 
     *  list of (global) functions
     */
    virtual QCString trFunctions()
    { return DECODE("Funkce"); }

    /*! This is used in the documentation of a file as a header before the 
     *  list of (global) variables
     */
    virtual QCString trVariables()
    { return DECODE("Proměnné"); }

    /*! This is used in the documentation of a file as a header before the 
     *  list of (global) variables
     */
    virtual QCString trEnumerationValues()
    { return DECODE("Hodnoty výčtů"); }
    
    /*! This is used in man pages as the author section. */
    virtual QCString trAuthor()
    { return DECODE("Autor"); }

    /*! This is used in the documentation of a file before the list of
     *  documentation blocks for defines
     */
    virtual QCString trDefineDocumentation()
    { return DECODE("Dokumentace k definicím maker"); }

    /*! This is used in the documentation of a file/namespace before the list 
     *  of documentation blocks for function prototypes
     */
    virtual QCString trFunctionPrototypeDocumentation()
    { return DECODE("Dokumentace prototypů"); }

    /*! This is used in the documentation of a file/namespace before the list 
     *  of documentation blocks for typedefs
     */
    virtual QCString trTypedefDocumentation()
    { return DECODE("Dokumentace definic typů"); }

    /*! This is used in the documentation of a file/namespace before the list 
     *  of documentation blocks for enumeration types
     */
    virtual QCString trEnumerationTypeDocumentation()
    { return DECODE("Dokumentace výčtových typů"); }

    /*! This is used in the documentation of a file/namespace before the list 
     *  of documentation blocks for enumeration values
     */
    virtual QCString trEnumerationValueDocumentation()
    { return DECODE("Dokumentace výčtových hodnot"); }

    /*! This is used in the documentation of a file/namespace before the list 
     *  of documentation blocks for functions
     */
    virtual QCString trFunctionDocumentation()
    { return DECODE("Dokumentace funkcí"); }

    /*! This is used in the documentation of a file/namespace before the list 
     *  of documentation blocks for variables
     */
    virtual QCString trVariableDocumentation()
    { return DECODE("Dokumentace proměnných"); }

    /*! This is used in the documentation of a file/namespace/group before 
     *  the list of links to documented compounds
     */
    virtual QCString trCompounds()
    { return DECODE("Třídy"); }

    /*! This is used in the documentation of a group before the list of 
     *  links to documented files
     */
    virtual QCString trFiles()
    { return DECODE("Soubory"); }

    /*! This is used in the standard footer of each page and indicates when 
     *  the page was generated 
     */
    virtual QCString trGeneratedAt(const char *date,const char *projName)
    { 
      QCString result=(QCString)"Generováno "+date;
      if (projName) result+=(QCString)" pro projekt "+projName;
      result+=(QCString)" programem";
      return DECODE(result);
    }
    /*! This is part of the sentence used in the standard footer of each page.
     */
    virtual QCString trWrittenBy()
    {
      return DECODE(" -- autor ");
    }

    /*! this text is put before a class diagram */
    virtual QCString trClassDiagram(const char *clName)
    {
      return DECODE((QCString)"Diagram dědičnosti pro třídu "+clName);
    }
    
    /*! this text is generated when the \internal command is used. */
    virtual QCString trForInternalUseOnly()
    { return DECODE("Pouze pro vnitřní použití."); }

    /*! this text is generated when the \reimp command is used. */
    virtual QCString trReimplementedForInternalReasons()
    { return DECODE("Reimplementováno z interních důvodů; "
                    "aplikační rozhraní zachováno."); }

    /*! this text is generated when the \warning command is used. */
    virtual QCString trWarning()
    { return DECODE("Pozor"); }

    /*! this text is generated when the \bug command is used. */
    virtual QCString trBugsAndLimitations()
    { return DECODE("Chyby a omezení"); }

    /*! this text is generated when the \version command is used. */
    virtual QCString trVersion()
    { return DECODE("Verze"); }

    /*! this text is generated when the \date command is used. */
    virtual QCString trDate()
    { return DECODE("Datum"); }

    /*! this text is generated when the \author command is used. */
    virtual QCString trAuthors()
    { return DECODE("Autor/autoři"); }

    /*! this text is generated when the \return command is used. */
    virtual QCString trReturns()
    { return DECODE("Návratová hodnota"); }

    /*! this text is generated when the \sa command is used. */
    virtual QCString trSeeAlso()
    { return DECODE("Viz také"); }

    /*! this text is generated when the \param command is used. */
    virtual QCString trParameters()
    { return DECODE("Parametry"); }

    /*! this text is generated when the \exception command is used. */
    virtual QCString trExceptions()
    { return DECODE("Výjimky"); }
    
    /*! this text is used in the title page of a LaTeX document. */
    virtual QCString trGeneratedBy()
    { return DECODE("Generováno programem"); }

    // new since 0.49-990307
    
    /*! used as the title of page containing all the index of all namespaces. */
    virtual QCString trNamespaceList()
    { return DECODE("Seznam prostorů jmen"); }

    /*! used as an introduction to the namespace list */
    virtual QCString trNamespaceListDescription(bool extractAll)
    {
      QCString result="Zde naleznete seznam všech ";
      if (!extractAll) result+="dokumentovaných ";
      result+="prostorů jmen se stručným popisem:";
      return DECODE(result);
    }

    /*! used in the class documentation as a header before the list of all
     *  friends of a class
     */
    virtual QCString trFriends()
    { return DECODE("Friends"); }
    
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
    
    /*! used in the class documentation as a header before the list of all
     * related classes 
     */
    virtual QCString trRelatedFunctionDocumentation()
    { return DECODE("Dokumentace k friends"); }
    
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////

    /*! used as the title of the HTML page of a class/struct/union */
    virtual QCString trCompoundReference(const char *clName,
                                    ClassDef::CompoundType compType,
                                    bool isTemplate)
    {
      QCString result("Dokumentace ");
      if (isTemplate) result+="šablony ";
      switch(compType)
      {
        case ClassDef::Class:      result+="třídy "; break;
        case ClassDef::Struct:     result+="struktury "; break;
        case ClassDef::Union:      result+="unie "; break;
        case ClassDef::Interface:  result+="rozhraní "; break;
        case ClassDef::Exception:  result+="výjimky "; break;
      }
      result+=clName;
      return DECODE(result);
    }

    /*! used as the title of the HTML page of a file */
    virtual QCString trFileReference(const char *fileName)
    {
      QCString result("Dokumentace souboru ");
      result+=fileName; 
      return DECODE(result);
    }

    /*! used as the title of the HTML page of a namespace */
    virtual QCString trNamespaceReference(const char *namespaceName)
    {
      QCString result("Dokumentace prostoru jmen ");
      result+=namespaceName;
      return DECODE(result);
    }
    
    /*! \mgroup Class sections
     *  these are for the member sections of a class, struct or union 
     */
    virtual QCString trPublicMembers()
    { return DECODE("Veřejné metody"); }
    virtual QCString trPublicSlots()
    { return DECODE("Veřejné sloty"); }
    virtual QCString trSignals()
    { return DECODE("Signály"); }
    virtual QCString trStaticPublicMembers()
    { return DECODE("Statické veřejné metody"); }
    virtual QCString trProtectedMembers()
    { return DECODE("Chráněné metody"); }
    virtual QCString trProtectedSlots()
    { return DECODE("Chráněné sloty"); }
    virtual QCString trStaticProtectedMembers()
    { return DECODE("Statické chráněné metody"); }
    virtual QCString trPrivateMembers()
    { return DECODE("Privátní metody"); }
    virtual QCString trPrivateSlots()
    { return DECODE("Privátní sloty"); }
    virtual QCString trStaticPrivateMembers()
    { return DECODE("Statické privátní metody"); }
    /*! \endmgroup */ 
    
    /*! this function is used to produce a comma-separated list of items.
     *  use generateMarker(i) to indicate where item i should be put.
     */
    virtual QCString trWriteList(int numEntries)
    {
      QCString result;
      int i;
      // the inherits list contain `numEntries' classes
      for (i=0;i<numEntries;i++) 
      {
        // use generateMarker to generate placeholders for the class links!
        result+=generateMarker(i); // generate marker for entry i in the list 
                                   // (order is left to right)
        
        if (i!=numEntries-1)  // not the last entry, so we need a separator
        {
          if (i<numEntries-2) // not the fore last entry 
            result+=", ";
          else                // the fore last entry
            result+=" a ";
        }
      }
      return DECODE(result); 
    }
    
    /*! used in class documentation to produce a list of base classes,
     *  if class diagrams are disabled.
     */
    virtual QCString trInheritsList(int numEntries)
    {
      return DECODE("Dědí "+trWriteList(numEntries)+".");
    }

    /*! used in class documentation to produce a list of super classes,
     *  if class diagrams are disabled.
     */
    virtual QCString trInheritedByList(int numEntries)
    {
      QCString result("Zděděna ");
      result += (numEntries == 1) ? "třídou " : "třídami ";
      result += trWriteList(numEntries)+".";
      return DECODE(result);
    }

    /*! used in member documentation blocks to produce a list of 
     *  members that are hidden by this one.
     */
    virtual QCString trReimplementedFromList(int numEntries)
    {
      QCString result("Reimplementuje ");
      result += (numEntries == 1) ? "metodu třídy " : "metody tříd ";
      result += trWriteList(numEntries)+".";
      return DECODE(result);
    }

    /*! used in member documentation blocks to produce a list of
     *  all member that overwrite the implementation of this member.
     */
    virtual QCString trReimplementedInList(int numEntries)
    {
      QCString result("Reimplementováno ");
      result += (numEntries == 1) ? "třídou " : "třídami ";
      result += trWriteList(numEntries)+".";
      return DECODE(result);
    }

    /*! This is put above each page as a link to all members of namespaces. */
    virtual QCString trNamespaceMembers()
    { return DECODE("Symboly v prostorech jmen"); }

    /*! This is an introduction to the page with all namespace members */
    virtual QCString trNamespaceMemberDescription(bool extractAll)
    { 
      QCString result="Zde naleznete seznam všech ";
      if (!extractAll) result+="dokumentovaných ";
      result+="symbolů, které jsou definovány ve svých prostorech jmen. "
              "U každého je uveden odkaz na ";
      if (extractAll) 
        result+="dokumentaci příslušného prostoru jmen:";
      else 
        result+="příslušný prostor jmen:";
      return DECODE(result);
    }
    /*! This is used in LaTeX as the title of the chapter with the 
     *  index of all namespaces.
     */
    virtual QCString trNamespaceIndex()
    { return DECODE("Rejstřík prostorů jmen"); }

    /*! This is used in LaTeX as the title of the chapter containing
     *  the documentation of all namespaces.
     */
    virtual QCString trNamespaceDocumentation()
    { return DECODE("Dokumentace prostorů jmen"); }

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990522
//////////////////////////////////////////////////////////////////////////

    /*! This is used in the documentation before the list of all
     *  namespaces in a file.
     */
    virtual QCString trNamespaces()
    { return DECODE("Prostory jmen"); }

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990728
//////////////////////////////////////////////////////////////////////////

    /*! This is put at the bottom of a class documentation page and is
     *  followed by a list of files that were used to generate the page.
     */
    virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
        bool single)
    { // here s is one of " Class", " Struct" or " Union"
      // single is true implies a single file
      QCString result=(QCString)"Dokumentace pro ";
      switch(compType)
      {
        case ClassDef::Class:      result+="tuto třídu"; break;
        case ClassDef::Struct:     result+="tuto strukturu (struct)"; break;
        case ClassDef::Union:      result+="tuto unii (union)"; break;
        case ClassDef::Interface:  result+="toto rozhraní"; break;
        case ClassDef::Exception:  result+="tuto výjimku"; break;
      }
      result+=" byla generována z ";
      if (single) result+="následujícího souboru:"; 
      else        result+="následujících souborů:";
      return DECODE(result);
    }

    /*! This is in the (quick) index as a link to the alphabetical compound
     * list.
     */
    virtual QCString trAlphabeticalList()
    { return DECODE("Rejstřík tříd"); }

//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////

    /*! This is used as the heading text for the retval command. */
    virtual QCString trReturnValues()
    { return DECODE("Vracené hodnoty"); }

    /*! This is in the (quick) index as a link to the main page (index.html)
     */
    virtual QCString trMainPage()
    { return DECODE("Hlavní stránka"); }

    /*! This is used in references to page that are put in the LaTeX 
     *  documentation. It should be an abbreviation of the word page.
     */
    virtual QCString trPageAbbreviation()
    { return DECODE("s."); }

//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////

    virtual QCString trSources()
    {
      return DECODE("Zdroje");
    }
    virtual QCString trDefinedAtLineInSourceFile()
    {
      return DECODE("Definice je uvedena na řádku @0 v souboru @1.");
    }
    virtual QCString trDefinedInSourceFile()
    {
      return DECODE("Definice v souboru @0.");
    }

//////////////////////////////////////////////////////////////////////////
// new since 0.49-991205
//////////////////////////////////////////////////////////////////////////

    virtual QCString trDeprecated()
    {
      return DECODE("Zastaralé");
    }

//////////////////////////////////////////////////////////////////////////
// new since 1.0.0
//////////////////////////////////////////////////////////////////////////

    /*! this text is put before a collaboration diagram */
    virtual QCString trCollaborationDiagram(const char *clName)
    {
      return DECODE((QCString)"Diagram tříd pro "+clName+":");
    }
    /*! this text is put before an include dependency graph */
    virtual QCString trInclDepGraph(const char *fName)
    {
      return DECODE((QCString)"Graf závislostí na vkládaných souborech "
                    "pro "+fName+":");
    }
    /*! header that is put before the list of constructor/destructors. */
    virtual QCString trConstructorDocumentation()
    {
      return DECODE("Dokumentace konstruktoru a destruktoru"); 
    }
    /*! Used in the file documentation to point to the corresponding sources. */
    virtual QCString trGotoSourceCode()
    {
      return DECODE("Zobrazit zdrojový text tohoto souboru.");
    }
    /*! Used in the file sources to point to the corresponding documentation. */
    virtual QCString trGotoDocumentation()
    {
      return DECODE("Zobrazit dokumentaci tohoto souboru.");
    }
    /*! Text for the \pre command */
    virtual QCString trPrecondition()
    {
      return DECODE("Precondition");
    }
    /*! Text for the \post command */
    virtual QCString trPostcondition()
    {
      return DECODE("Postcondition");
    }
    /*! Text for the \invariant command */
    virtual QCString trInvariant()
    {
      return DECODE("Invariant");
    }
    /*! Text shown before a multi-line variable/enum initialization */
    virtual QCString trInitialValue()
    {
      return DECODE("Initializer:");
    }
    /*! Text used the source code in the file index */
    virtual QCString trCode()
    {
      return DECODE("zdrojový text");
    }
    virtual QCString trGraphicalHierarchy()
    {
      return DECODE("Grafické zobrazení hierarchie tříd");
    }
    virtual QCString trGotoGraphicalHierarchy()
    {
      return DECODE("Zobrazit grafickou podobu hierarchie tříd");
    }
    virtual QCString trGotoTextualHierarchy()
    {
      return DECODE("Zobrazit textovou podobu hierarchie tříd");
    }
    virtual QCString trPageIndex()
    {
      return DECODE("Rejstřík stránek");
    }

//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
    
    virtual QCString trNote()
    {
      return DECODE("Poznámka");
    }
    virtual QCString trPublicTypes()
    {
      return DECODE("Veřejné typy");
    }
    virtual QCString trPublicAttribs()
    {
      return DECODE("Veřejné atributy");
    }
    virtual QCString trStaticPublicAttribs()
    {
      return DECODE("Statické veřejné atributy");
    }
    virtual QCString trProtectedTypes()
    {
      return DECODE("Chráněné typy");
    }
    virtual QCString trProtectedAttribs()
    {
      return DECODE("Chráněné atributy");
    }
    virtual QCString trStaticProtectedAttribs()
    {
      return DECODE("Statické chráněné atributy");
    }
    virtual QCString trPrivateTypes()
    {
      return DECODE("Privátní typy");
    }
    virtual QCString trPrivateAttribs()
    {
      return DECODE("Privátní atributy");
    }
    virtual QCString trStaticPrivateAttribs()
    {
      return DECODE("Statické privátní atributy");
    }

//////////////////////////////////////////////////////////////////////////
// new since 1.1.3
//////////////////////////////////////////////////////////////////////////

    /*! Used as a marker that is put before a todo item */
    virtual QCString trTodo()
    {
      return DECODE("Udělat");
    }
    /*! Used as the header of the todo list */
    virtual QCString trTodoList()
    {
      return DECODE("Seznam plánovaných úprav");
    }

//////////////////////////////////////////////////////////////////////////
// new since 1.1.4
//////////////////////////////////////////////////////////////////////////

    virtual QCString trReferencedBy()
    {
      return DECODE("Používá se v");
    }
    virtual QCString trRemarks()
    {
      return DECODE("Poznámky"); // ??? not checked in a context
    }
    virtual QCString trAttention()
    {
      return DECODE("Upozornění"); // ??? not checked in a context
    }
    virtual QCString trInclByDepGraph()
    {
      return DECODE("Následující graf ukazuje, které soubory přímo nebo "
             "nepřímo vkládají tento soubor:");
    }
    virtual QCString trSince()
    {
      return DECODE("Od"); // ??? not checked in a context
    }

////////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////

    /*! title of the graph legend page */
    virtual QCString trLegendTitle()
    {
      return DECODE("Vysvětlivky ke grafu");
    }
    /*! page explaining how the dot graph's should be interpreted */
    virtual QCString trLegendDocs()
    {
      QCString result(  
        "Zde naleznete vysvětlení, jak mají být interpretovány grafy, "
        "které byly generovány programem doxygen.<p>\n"
        "Uvažujte následující příklad:\n"
        "\\code\n"
        "/*! Neviditelná třída, která se v grafu nezobrazuje, protože "
        "došlo k ořezání grafu. */\n"
        "class Invisible { };\n\n"
        "/*! Třída, u které došlo k ořezání grafu. Vztah dědičnosti "
        "je skryt. */\n"
        "class Truncated : public Invisible { };\n\n"
        "/* Třída, která není dokumentována komentáři programu doxygen. */\n"
        "class Undocumented { };\n\n"
        "/*! Odvozená třída s veřejným (public) děděním bázové třídy. */\n"
        "class PublicBase : public Truncated { };\n\n"
        "/*! Odvozená třída s chráněným (protected) děděním bázové třídy. */\n"
        "class ProtectedBase { };\n\n"
        "/*! Odvozená třída s privátním děděním bázové třídy. */\n"
        "class PrivateBase { };\n\n"
        "/*! Třída, která je využívána třídou Inherited. */\n"
        "class Used { };\n\n"
        "/*! Odvozená třída, která různým způsobem dědí z více bázových "
        "tříd. */\n"
        "class Inherited : public PublicBase,\n"
        "                  protected ProtectedBase,\n"
        "                  private PrivateBase,\n"
        "                  public Undocumented\n"
        "{\n"
        "  private:\n"
        "    Used *m_usedClass;\n"
        "};\n"
        "\\endcode\n"
        "Pokud je položka \\c MAX_DOT_GRAPH_HEIGHT konfiguračního souboru "
        "nastavena na hodnotu 200, bude vygenerován následující graf:"
        "<p><center><img src=\"graph_legend.gif\"></center>\n"
        "<p>\n"
        "Bloky (tj. uzly) v uvedeném grafu mají následující význam:\n"
        "<ul>\n"
        "<li>Černě vyplněný obdélník reprezentuje strukturu nebo třídu, "
            "pro kterou byl graf generován.\n"
        "<li>Obdélník s černým obrysem označuje dokumentovanou "
            "strukturu nebo třídu.\n"
        "<li>Obdélník s šedým obrysem označuje nedokumentovanou "
            "strukturu nebo třídu.\n"
        "<li>Obdélník s červeným obrysem označuje dokumentovanou "
            "strukturu nebo třídu, pro kterou\n"
            "nejsou zobrazeny všechny vztahy dědičnosti nebo obsažení. "
            "Graf je ořezán v případě, kdy jej\n"
            "není možné umístit do vymezených hranic.\n"
        "</ul>\n"
        "Šipky (tj. hrany grafu) mají následující význam:\n"
        "<ul>\n"
        "<li>Tmavě modrá šipka se používá pro označení vztahu veřejné "
            "dědičnosti mezi dvěma třídami.\n"
        "<li>Tmavě zelená šipka označuje vztah chráněné dědičnosti "
            "(protected).\n"
        "<li>Tmavě červená šipka označuje vztah privátní dědičnosti.\n"
        "<li>Purpurová šipka kreslená čárkovaně se používá v případě, "
            "kdy je třída obsažena v jiné třídě,\n"
            "nebo kdy je používána jinou třídou. Je označena identifikátorem "
            "jedné nebo více proměných, přes které\n"
            "je třída nebo struktura zpřístupněna.\n"
        "</ul>\n");
        
        return DECODE(result);
    }
    /*! text for the link to the legend page */
    virtual QCString trLegend()
    {
      return DECODE("vysvětlivky");
    }

//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
    
    /*! Used as a marker that is put before a test item */
    virtual QCString trTest()
    {
      return "Test";
    }
   
    /*! Used as the header of the test list */
    virtual QCString trTestList()
    {
      return "Seznam testů";
    }

};

#endif // TRANSLATOR_CZ_H
