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 <cstddef>
9#include <string>
10#include <string_view>
11#include <type_traits>
12#include <utility>
13#include <vector>
14
15namespace ArcdpsExtension {
27 class Localization final : public Singleton<Localization> {
28 public:
30
31 [[nodiscard]] std::string_view Translate(size_t pId) const;
32 [[nodiscard]] std::string_view Translate(auto lang, size_t pId) const {
33 return mTranslations.at(static_cast<size_t>(lang)).at(pId);
34 }
35
36 template<typename E>
37 requires std::is_enum_v<E>
38 [[nodiscard]] std::string_view Translate(E pId) const {
39 return Translate(std::to_underlying(pId));
40 }
41 template<typename E>
42 requires std::is_enum_v<E>
43 [[nodiscard]] std::string_view Translate(auto lang, E pId) const {
44 return Translate(lang, std::to_underlying(pId));
45 }
46
47 template<typename Num>
48 requires std::is_integral_v<Num> && (!std::same_as<Num, size_t>)
49 [[nodiscard]] std::string_view Translate(Num pId) const {
50 return Translate(static_cast<size_t>(pId));
51 }
52 template<typename Num>
53 requires std::is_integral_v<Num> && (!std::same_as<Num, size_t>)
54 [[nodiscard]] std::string_view Translate(auto lang, Num pId) const {
55 return Translate(lang, static_cast<size_t>(pId));
56 }
57
62 template<typename... Args>
63 [[nodiscard]] static std::string_view STranslate(Args... args) {
64 return Localization::instance().Translate(std::forward<Args>(args)...);
65 }
66
67 void AddTranslation(gwlanguage pLang, const char8_t* pText) {
68 AddTranslation(pLang, reinterpret_cast<const char*>(pText));
69 }
70
71 template<typename... Args>
72 void AddTranslation(gwlanguage pLang, Args&&... args) {
73 auto& translation = mTranslations.at(pLang);
74 translation.emplace_back(std::forward<Args>(args)...);
75 }
76
77 void Load(gwlanguage pLang, const std::ranges::common_range auto& pRange) {
78 for (const auto& value : pRange) {
79 AddTranslation(pLang, value);
80 }
81 }
82
83 void ChangeLanguage(gwlanguage pLang);
84 static void SChangeLanguage(gwlanguage pLang);
85
86 template<typename... Args>
87 void OverrideTranslation(gwlanguage pLanguage, size_t pTranslation, Args&&... args) {
88 mTranslations.at(pLanguage).at(pTranslation) = std::move(std::string(std::forward<Args...>(args...)));
89 }
90
91 template<typename E, typename... Args>
92 requires std::is_enum_v<E>
93 void OverrideTranslation(gwlanguage pLanguage, E pTranslation, Args&&... args) {
94 OverrideTranslation(pLanguage, static_cast<std::underlying_type_t<E>>(pTranslation), std::forward<Args...>(args...));
95 }
96
97 template<typename Num, typename... Args>
98 requires std::is_integral_v<Num> && (!std::same_as<Num, size_t>)
99 void OverrideTranslation(gwlanguage pLanguage, Num pTranslation, Args&&... args) {
100 OverrideTranslation(pLanguage, static_cast<size_t>(pTranslation), std::forward<Args...>(args...));
101 }
102
103 private:
104 std::array<std::vector<std::string>, 6> mTranslations;
105 gwlanguage mCurrentLanguage = GWL_ENG;
106 std::vector<std::string>* mCurrentTranslation;
107 };
108
109 // Same as arcdps' gwlanguage, but contains LikeGame option instead of KR.
110 // Use this in your settings object and handle LikeGame manually.
111 enum class LanguageSetting {
112 English = 0,
113 LikeGame = 1,
114 French = 2,
115 German = 3,
116 Spanish = 4,
117 Chinese = 5,
118 };
119} // namespace ArcdpsExtension
120
121std::string_view to_string(ArcdpsExtension::LanguageSetting pLang);
std::string_view to_string(ArcdpsExtension::LanguageSetting pLang)
Definition Localization.cpp:28
gwlanguage
Definition arcdps_structs_slim.h:162
@ GWL_ENG
Definition arcdps_structs_slim.h:163
Definition Localization.h:27
std::string_view Translate(auto lang, size_t pId) const
Definition Localization.h:32
static std::string_view STranslate(Args... args)
Definition Localization.h:63
void OverrideTranslation(gwlanguage pLanguage, size_t pTranslation, Args &&... args)
Definition Localization.h:87
Localization()
Definition Localization.cpp:5
std::string_view Translate(Num pId) const
Definition Localization.h:49
std::string_view Translate(auto lang, Num pId) const
Definition Localization.h:54
void ChangeLanguage(gwlanguage pLang)
Definition Localization.cpp:19
std::string_view Translate(E pId) const
Definition Localization.h:38
void OverrideTranslation(gwlanguage pLanguage, Num pTranslation, Args &&... args)
Definition Localization.h:99
void AddTranslation(gwlanguage pLang, Args &&... args)
Definition Localization.h:72
void OverrideTranslation(gwlanguage pLanguage, E pTranslation, Args &&... args)
Definition Localization.h:93
void AddTranslation(gwlanguage pLang, const char8_t *pText)
Definition Localization.h:67
std::string_view Translate(auto lang, E pId) const
Definition Localization.h:43
static void SChangeLanguage(gwlanguage pLang)
Definition Localization.cpp:24
void Load(gwlanguage pLang, const std::ranges::common_range auto &pRange)
Definition Localization.h:77
std::string_view Translate(size_t pId) const
Definition Localization.cpp:15
Definition Singleton.h:48
static T2 & instance()
Definition Singleton.h:52
Definition ArcdpsExtension.h:10
LanguageSetting
Definition Localization.h:111