ArcdpsExtension
 
Loading...
Searching...
No Matches
Localization.h
Go to the documentation of this file.
1#pragma once
2
4#include "Singleton.h"
5
6#include <array>
7#include <concepts>
8#include <string>
9#include <type_traits>
10#include <vector>
11
12namespace ArcdpsExtension {
24 class Localization final : public Singleton<Localization> {
25 public:
27
28 [[nodiscard]] const std::string& Translate(size_t pId) const;
29
30 template<typename E>
31 requires std::is_enum_v<E>
32 [[nodiscard]] const std::string& Translate(E pId) const {
33 return Translate(static_cast<std::underlying_type_t<E>>(pId));
34 }
35
36 template<typename Num>
37 requires std::is_integral_v<Num> && (!std::same_as<Num, size_t>)
38 [[nodiscard]] const std::string& Translate(Num pId) const {
39 return Translate(static_cast<size_t>(pId));
40 }
41
42 template<typename T>
43 [[nodiscard]] static const std::string& STranslate(T pId) {
44 return Localization::instance().Translate(pId);
45 }
46
47 void AddTranslation(gwlanguage pLang, const char* pText) {
48 auto& translation = mTranslations.at(pLang);
49 translation.emplace_back(pText);
50 }
51
52 void AddTranslation(gwlanguage pLang, const char8_t* pText) {
53 auto& translation = mTranslations.at(pLang);
54 translation.emplace_back(reinterpret_cast<const char*>(pText));
55 }
56
57 void AddTranslation(gwlanguage pLang, const std::string& pText) {
58 auto& translation = mTranslations.at(pLang);
59 translation.emplace_back(pText);
60 }
61
62 void Load(gwlanguage pLang, const std::ranges::common_range auto& pRange) {
63 for (const auto& value : pRange) {
64 AddTranslation(pLang, value);
65 }
66 }
67
68 void ChangeLanguage(gwlanguage pLang);
69 static void SChangeLanguage(gwlanguage pLang);
70
71 void OverrideTranslation(gwlanguage pLanguage, size_t pTranslation, const std::string& pText);
72
73 template<typename E>
74 requires std::is_enum_v<E>
75 const std::string& OverrideTranslation(gwlanguage pLanguage, E pTranslation, const std::string& pText) {
76 return OverrideTranslation(pLanguage, static_cast<std::underlying_type_t<E>>(pTranslation), pText);
77 }
78
79 template<typename Num>
80 requires std::is_integral_v<Num> && (!std::same_as<Num, size_t>)
81 void OverrideTranslation(gwlanguage pLanguage, Num pTranslation, const std::string& pText) {
82 return OverrideTranslation(pLanguage, static_cast<size_t>(pTranslation), pText);
83 }
84
85 template<typename T>
86 void OverrideTranslation(gwlanguage pLanguage, T pTranslation, const std::string& pText) {
87 return OverrideTranslation(pLanguage, pTranslation, pText);
88 }
89
90 private:
91 std::array<std::vector<std::string>, 6> mTranslations;
92 gwlanguage mCurrentLanguage = GWL_ENG;
93 std::vector<std::string>* mCurrentTranslation;
94 };
95} // namespace ArcdpsExtension
gwlanguage
Definition arcdps_structs_slim.h:162
@ GWL_ENG
Definition arcdps_structs_slim.h:163
Definition Localization.h:24
const std::string & Translate(size_t pId) const
Definition Localization.cpp:14
void OverrideTranslation(gwlanguage pLanguage, Num pTranslation, const std::string &pText)
Definition Localization.h:81
const std::string & Translate(E pId) const
Definition Localization.h:32
Localization()
Definition Localization.cpp:5
void ChangeLanguage(gwlanguage pLang)
Definition Localization.cpp:18
void OverrideTranslation(gwlanguage pLanguage, T pTranslation, const std::string &pText)
Definition Localization.h:86
const std::string & OverrideTranslation(gwlanguage pLanguage, E pTranslation, const std::string &pText)
Definition Localization.h:75
void AddTranslation(gwlanguage pLang, const char8_t *pText)
Definition Localization.h:52
static const std::string & STranslate(T pId)
Definition Localization.h:43
const std::string & Translate(Num pId) const
Definition Localization.h:38
void AddTranslation(gwlanguage pLang, const std::string &pText)
Definition Localization.h:57
void OverrideTranslation(gwlanguage pLanguage, size_t pTranslation, const std::string &pText)
Definition Localization.cpp:27
static void SChangeLanguage(gwlanguage pLang)
Definition Localization.cpp:23
void Load(gwlanguage pLang, const std::ranges::common_range auto &pRange)
Definition Localization.h:62
void AddTranslation(gwlanguage pLang, const char *pText)
Definition Localization.h:47
Definition Singleton.h:47
static T2 & instance()
Definition Singleton.h:51
Definition ArcdpsExtension.h:10