TrinityCore
LanguageMgr.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef _LANGUAGE_MGR_H
19#define _LANGUAGE_MGR_H
20
21#include "Common.h"
22#include "Hash.h"
23#include "IteratorPair.h"
24#include "SharedDefines.h"
25#include <vector>
26#include <unordered_map>
27
29{
32
33 friend bool operator==(LanguageDesc const& left, LanguageDesc const& right) = default;
34};
35
36struct SpellEffectEntry;
37
39{
40 friend class World;
41 friend class SpellMgr;
42
43 typedef std::pair<uint32, uint8> WordKey;
44 typedef std::vector<char const*> WordList;
45 typedef std::unordered_map<WordKey, WordList> WordsMap;
46
47 typedef std::unordered_multimap<uint32, LanguageDesc> LanguagesMap;
48
49 // Constructors
50 private:
53
54 // Accessors (const or static functions)
55 public:
56 LanguageMgr(LanguageMgr const& right) = delete;
57 LanguageMgr(LanguageMgr&& right) = delete;
58 LanguageMgr& operator=(LanguageMgr const& right) = delete;
59 LanguageMgr& operator=(LanguageMgr&& right) = delete;
60
61 static LanguageMgr* instance();
62
63 //
64 std::string Translate(std::string const& msg, uint32 language, LocaleConstant locale) const;
65
66 bool IsLanguageExist(uint32 languageId) const;
67 Trinity::IteratorPair<LanguagesMap::const_iterator> GetLanguageDescById(Language languageId) const;
68
69 /* Calls a callback for each available language.
70 * Callback signature: bool callback(uint32 lang, LanguageDesc const& languageDesc)
71 */
72 template <typename T>
73 bool ForEachLanguage(T callback)
74 {
75 for (LanguagesMap::value_type const& pair : _langsMap)
76 if (!callback(pair.first, pair.second))
77 return false;
78 return true;
79 }
80
81 private:
82 /* Create assosiation between language and spell id
83 * Language is taken from effect value.
84 * Assuming Effect == SPELL_EFFECT_LANGUAGE
85 */
86 void LoadSpellEffectLanguage(SpellEffectEntry const* spellEffect);
87
88 void LoadLanguagesWords();
89 void LoadLanguages();
90
91 WordList const* FindWordGroup(uint32 language, uint32 wordLen) const;
92
95};
96
97#define sLanguageMgr LanguageMgr::instance()
98
99#endif
LocaleConstant
Definition: Common.h:48
#define TC_GAME_API
Definition: Define.h:123
uint32_t uint32
Definition: Define.h:142
Language
std::pair< uint32, uint8 > WordKey
Definition: LanguageMgr.h:43
WordsMap _wordsMap
Definition: LanguageMgr.h:94
bool ForEachLanguage(T callback)
Definition: LanguageMgr.h:73
std::unordered_map< WordKey, WordList > WordsMap
Definition: LanguageMgr.h:45
LanguageMgr(LanguageMgr &&right)=delete
LanguagesMap _langsMap
Definition: LanguageMgr.h:93
LanguageMgr & operator=(LanguageMgr &&right)=delete
LanguageMgr(LanguageMgr const &right)=delete
std::vector< char const * > WordList
Definition: LanguageMgr.h:44
LanguageMgr & operator=(LanguageMgr const &right)=delete
std::unordered_multimap< uint32, LanguageDesc > LanguagesMap
Definition: LanguageMgr.h:47
static SpellMgr * instance()
Definition: SpellMgr.cpp:135
Utility class to enable range for loop syntax for multimap.equal_range uses.
Definition: IteratorPair.h:32
The World.
Definition: World.h:563
friend bool operator==(LanguageDesc const &left, LanguageDesc const &right)=default
uint32 SkillId
Definition: LanguageMgr.h:31
uint32 SpellId
Definition: LanguageMgr.h:30