Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/core/src/orxonox/core/Language.h @ 845

Last change on this file since 845 was 845, checked in by landauf, 16 years ago

(1) removed ExportClass and ExportAbstractClass macros
(2) removed _UtilExport from templates

reto, i hope (2) removed some of your compiler errors and orxonox works still on your system with (1)

File size: 5.1 KB
RevLine 
[704]1/*
2 *   ORXONOX - the hottest 3D action shooter ever to exist
3 *
4 *
5 *   License notice:
6 *
7 *   This program is free software; you can redistribute it and/or
8 *   modify it under the terms of the GNU General Public License
9 *   as published by the Free Software Foundation; either version 2
10 *   of the License, or (at your option) any later version.
11 *
12 *   This program is distributed in the hope that it will be useful,
13 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
14 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 *   GNU General Public License for more details.
16 *
17 *   You should have received a copy of the GNU General Public License
18 *   along with this program; if not, write to the Free Software
19 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20 *
21 *   Author:
22 *      Fabian 'x3n' Landau
23 *   Co-authors:
24 *      ...
25 *
26 */
27
[813]28/**
[720]29    @file Language.h
30    @brief Definition of the Language and the LanguageEntry class.
31
[838]32    The Language class is used, to get a localisation of a string in the configured language.
33    The string is identified by another string, the label of the entry.
[720]34    If the translation in the configured language isn't available, the default entry, defined in the code, is used.
35
36    Usage:
37     - Set the entry with the default string:
[838]38       Language::getLanguage()->addEntry("label of the entry", "the string to translate");
[720]39
[838]40     - Get the localisation of the entry in the configured language:
41       std::cout << Language::getLanguage()->getLocalisation("name of the entry") << std::endl;
[720]42*/
43
[704]44#ifndef _Language_H__
45#define _Language_H__
46
47#include <map>
[715]48#include <string>
[704]49
50#include "CorePrereqs.h"
51#include "OrxonoxClass.h"
52
53namespace orxonox
54{
[826]55    // ###############################
56    // ###      LanguageEntry      ###
57    // ###############################
[720]58    //! The LanguageEntry class stores the default- and the translated string of a given entry in the language file.
[704]59    class _CoreExport LanguageEntry : public OrxonoxClass
60    {
61        public:
[715]62            explicit LanguageEntry(const std::string& fallbackEntry);
[838]63            void setLocalisation(const std::string& localisation);
[715]64            void setDefault(const std::string& fallbackEntry);
[704]65
[728]66            /**
[838]67              @brief Returns the localised entry in the configured language.
[728]68              @return The translated entry
69            */
[838]70            inline const std::string& getLocalisation()
71                { return this->localisedEntry_; }
[704]72
[728]73            /**
74              @brief Returns the default entry.
75              @return The default entry
76            */
[715]77            inline const std::string& getDefault()
[704]78                { return this->fallbackEntry_; }
79
80        private:
[720]81            std::string fallbackEntry_;                             //!< The default entry: Used, if no translation is available or no language configured
[838]82            std::string localisedEntry_;                            //!< The localised entry in the configured language
83            bool bLocalisationSet_;                                 //!< True if the translation was set
[704]84    };
85
[826]86
87    // ###############################
88    // ###         Language        ###
89    // ###############################
[720]90    //! The Language class manges the language files and entries and stores the LanguageEntry objects in a map.
[704]91    class _CoreExport Language : public OrxonoxClass
92    {
[737]93        template <class T>
94        friend class ClassIdentifier; // forward declaration because of the private destructor
95
[704]96        public:
97            static Language& getLanguage();
98            void setConfigValues();
[838]99            void addEntry(const LanguageEntryLabel& label, const std::string& entry);
100            const std::string& getLocalisation(const LanguageEntryLabel& label) const;
[704]101
102        private:
103            Language();
104            Language(const Language& language) {}   // don't copy
105            virtual ~Language() {};                 // don't delete
106
107            void readDefaultLanguageFile();
108            void readTranslatedLanguageFile();
109            void writeDefaultLanguageFile() const;
[715]110            static const std::string getFileName(const std::string& language);
[838]111            LanguageEntry* createEntry(const LanguageEntryLabel& label, const std::string& entry);
[704]112
[720]113            std::string language_;                                  //!< The configured language
114            std::string defaultLanguage_;                           //!< The default language
[838]115            std::string defaultLocalisation_;                       //!< The returned string, if an entry unavailable entry is requested
116            std::map<std::string, LanguageEntry*> languageEntries_; //!< A map to store all LanguageEntry objects and their labels
[704]117    };
118}
119
[839]120#define AddLanguageEntry(label, fallbackstring) \
121    orxonox::Language::getLanguage().addEntry(label, fallbackstring)
122
123#define GetLocalisation(label) \
124    orxonox::Language::getLanguage().getLocalisation(label)
125
[704]126#endif /* _Language_H__ */
Note: See TracBrowser for help on using the repository browser.