Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/trunk/src/core/Language.h @ 1294

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