Skip to content

Commit 209d6c6

Browse files
committed
Add language support (WIP)
1 parent a50f987 commit 209d6c6

File tree

8 files changed

+92
-40
lines changed

8 files changed

+92
-40
lines changed

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@
7878
"stringextensions.hpp": "c",
7979
"reent.h": "c",
8080
"mutex.hpp": "c",
81-
"iomanip": "cpp"
81+
"iomanip": "cpp",
82+
"iostream": "cpp"
8283
}
8384
}

Includes/Helpers/Helpers.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ namespace CTRPluginFramework {
1818
extern string path;
1919

2020
bool IsCompatible(void);
21+
22+
extern Lang currLang;
23+
2124
void Settings(MenuEntry *entry);
2225

2326
namespace Helpers {

Library/Includes/Framework/Language.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
#include "../CTRPluginFrameworkImpl/System/ProcessImpl.hpp"
99

1010
namespace CTRPluginFramework {
11-
string AutoLanguage(string english, string french);
11+
// Define an enumeration for supported languages
12+
enum Lang {
13+
ENG, // English
14+
FRE // French
15+
};
1216
}
1317

1418
#endif

Library/Sources/Framework/Language.cpp

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,5 @@
33
#include "../../../Includes/stdafx.hpp"
44

55
namespace CTRPluginFramework {
6-
// Define an enumeration for supported languages
7-
enum Lang {
8-
ENG, // English
9-
FRE // French
10-
};
116

12-
// Language class to manage the current language setting and provide translation functionality
13-
class Language {
14-
public:
15-
// Constructor to initialize the current language to English by default
16-
Language() : m_currentLanguage(ENG) {}
17-
18-
// Function to set the current language
19-
void setLanguage(Lang lang) {
20-
m_currentLanguage = lang;
21-
}
22-
23-
// Function to get the current language
24-
Lang getLanguage() const {
25-
return m_currentLanguage;
26-
}
27-
28-
// Function to automatically choose the correct translation based on the current language setting
29-
string autoLanguage(string english, string french) const {
30-
return (m_currentLanguage == ENG ? english : french);
31-
}
32-
33-
private:
34-
Lang m_currentLanguage; // Member variable to store the current language setting
35-
};
367
}

Library/lib/libctrpf.a

-990 Bytes
Binary file not shown.

Sources/Helpers/Helpers.cpp

Lines changed: 55 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,68 @@ namespace CTRPluginFramework {
5353
return false;
5454
}
5555

56+
Lang currLang = Lang::ENG;
57+
58+
void LangFile(Lang lang) {
59+
File file(path + "/Lang.txt");
60+
string language;
61+
62+
if (File::Exists(path + "/Lang.txt") == 1)
63+
File::Remove(path + "/Lang.txt");
64+
65+
if (File::Exists(path + "/Lang.txt") == 0)
66+
File::Create(path + "/Lang.txt");
67+
68+
if (lang == Lang::ENG)
69+
language = "English";
70+
71+
if (lang == Lang::FRE)
72+
language = "Francais";
73+
74+
if (File::Exists(path + "/Lang.txt") == 1) {
75+
LineWriter writeFile(file);
76+
writeFile << language;
77+
writeFile.Flush();
78+
writeFile.Close();
79+
Message::Completed();
80+
Process::ReturnToHomeMenu();
81+
}
82+
}
83+
5684
void Settings(MenuEntry *entry) {
57-
static const vector<string> options = {"Reset"};
85+
static const vector<string> options = {"Language", "Reset"};
5886
KeyboardPlus keyboard;
5987
int settings;
6088

6189
if (keyboard.SetKeyboard(entry->Name() + ":", true, options, settings) != -1) {
62-
if (MessageBox(CenterAlign("Would you like to reset settings?"), DialogType::DialogYesNo, ClearScreen::Both)()) {
63-
if (File::Exists("Data.bin")) {
64-
File::Remove("Data.bin");
65-
Message::Completed();
66-
Process::ReturnToHomeMenu();
67-
return;
90+
if (settings == 0) {
91+
static const vector<string> langOption = {"English", "French"};
92+
int chooseLang;
93+
94+
if (keyboard.SetKeyboard("Language:\n\nNote: changing language will require a restart of the game!", true, langOption, chooseLang) != -1) {
95+
if (chooseLang == 0) {
96+
LangFile(Lang::ENG);
97+
return;
98+
}
99+
100+
if (chooseLang == 1) {
101+
LangFile(Lang::FRE);
102+
return;
103+
}
68104
}
105+
}
106+
107+
if (settings == 1) {
108+
if (MessageBox(CenterAlign("Would you like to reset settings?"), DialogType::DialogYesNo, ClearScreen::Both)()) {
109+
if (File::Exists("Data.bin")) {
110+
File::Remove("Data.bin");
111+
Message::Completed();
112+
Process::ReturnToHomeMenu();
113+
return;
114+
}
69115

70-
Message::Warning();
116+
Message::Warning();
117+
}
71118
}
72119
}
73120
}

Sources/Main.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,30 @@
33
#include "Menu.hpp"
44

55
namespace CTRPluginFramework {
6+
void InitLang(void) {
7+
File file(path + "/Lang.txt");
8+
string language;
9+
10+
if (File::Exists(path + "/Lang.txt") == 0)
11+
File::Create(path + "/Lang.txt");
12+
13+
if (File::Exists(path + "/Lang.txt") == 1) {
14+
LineReader readFile(file);
15+
readFile(language);
16+
17+
if (language == "English")
18+
currLang = Lang::ENG;
19+
20+
if (language == "Francais")
21+
currLang = Lang::FRE;
22+
}
23+
24+
else return;
25+
}
26+
627
void PatchProcess(FwkSettings &settings) {
728
IsCompatible();
29+
InitLang();
830

931
settings.AllowActionReplay = true;
1032
settings.AllowSearchEngine = true;

Sources/Menu.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
using namespace CTRPluginFramework;
1414

15+
string entryName(string english, string french) {
16+
return (currLang == Lang::ENG ? english : french);
17+
}
18+
1519
void InitMenu(PluginMenu &menu) {
1620
string note = Color::Orange << "Note" << Color::White << ": ";
1721

@@ -54,7 +58,7 @@ void InitMenu(PluginMenu &menu) {
5458
*pss += new MenuEntry("Bypass Gift & Centre Icon", PSS::BypassHackedIcons);
5559
menu += (group == Group::XY || group == Group::ORAS ? pss : plaza);
5660

57-
MenuFolder *battle = new MenuFolder("Battle");
61+
MenuFolder *battle = new MenuFolder(entryName("Battle", "Combat"));
5862
MenuFolder *primary = new MenuFolder("Primary");
5963

6064
*primary += new MenuFolder("Active", note + "must be in a battle to use.", vector<MenuEntry*>({

0 commit comments

Comments
 (0)