1
0
mirror of https://github.com/blupi-games/planetblupi synced 2024-12-30 10:15:36 +01:00

Save the selected language in the info file if different of user's locale

This commit is contained in:
Mathieu Schroeter 2017-08-24 10:52:40 +02:00
parent 25240911c8
commit a635640f4c
2 changed files with 54 additions and 14 deletions

View File

@ -51,6 +51,7 @@
#define MAXDEMO 2000
typedef struct {
// v1.0
Sint16 majRev;
Sint16 minRev;
Sint16 reserve1[9];
@ -65,7 +66,10 @@ typedef struct {
Sint16 bAccessBuild;
Sint16 prive;
Sint16 skill;
Sint16 reserve2[93];
// v1.1
Sint16 language;
Sint16 reserve2[92];
} DescInfo;
// Toutes les premières lettres doivent
@ -1584,11 +1588,13 @@ CEvent::CEvent ()
m_Languages.push_back (Language::fr);
m_Languages.push_back (Language::de);
if (GetLocale () == "en_US")
this->m_LangStart = GetLocale ();
if (this->m_LangStart == "en_US")
m_Lang = m_Languages.begin () + 1;
else if (GetLocale () == "fr")
else if (this->m_LangStart == "fr")
m_Lang = m_Languages.begin () + 2;
else if (GetLocale () == "de")
else if (this->m_LangStart == "de")
m_Lang = m_Languages.begin () + 3;
else
m_Lang = m_Languages.begin ();
@ -3611,30 +3617,52 @@ CEvent::PlayUp (Point pos)
return true;
}
Language
CEvent::GetStartLanguage ()
{
if (this->m_LangStart == "en_US")
return Language::en_US;
if (this->m_LangStart == "fr")
return Language::fr;
if (this->m_LangStart == "de")
return Language::de;
return Language::en;
}
Language
CEvent::GetLanguage ()
{
return *this->m_Lang;
}
void
CEvent::SetLanguage ()
CEvent::SetLanguage (Language lang)
{
static char env[64];
const char * lang;
const char * slang;
if (lang != Language::undef)
m_Lang = m_Languages.begin () + static_cast<int> (lang);
switch (*m_Lang)
{
default:
case Language::undef:
case Language::en:
lang = "C";
slang = "C";
break;
case Language::en_US:
lang = "en_US";
slang = "en_US";
break;
case Language::fr:
lang = "fr";
slang = "fr";
break;
case Language::de:
lang = "de";
slang = "de";
break;
}
snprintf (env, sizeof (env), "LANGUAGE=%s", lang);
snprintf (env, sizeof (env), "LANGUAGE=%s", slang);
{
putenv (env);
@ -4411,7 +4439,7 @@ CEvent::WriteInfo ()
goto error;
info.majRev = 1;
info.minRev = 0;
info.minRev = 1;
info.prive = m_private;
info.exercice = m_exercice;
info.mission = m_mission;
@ -4426,6 +4454,11 @@ CEvent::WriteInfo ()
info.audioVolume = m_pSound->GetAudioVolume ();
info.midiVolume = m_pSound->GetMidiVolume ();
/* Global settings */
info.language = static_cast<Sint16> (
this->GetLanguage () != this->GetStartLanguage () ? this->GetLanguage ()
: Language::undef);
nb = fwrite (&info, sizeof (info), 1, file);
if (nb < 1)
goto error;
@ -4474,6 +4507,9 @@ CEvent::ReadInfo ()
m_pSound->SetAudioVolume (info.audioVolume);
m_pSound->SetMidiVolume (info.midiVolume);
if ((info.majRev == 1 && info.minRev >= 1) || info.majRev >= 2)
this->SetLanguage (static_cast<Language> (info.language));
fclose (file);
return true;

View File

@ -76,6 +76,7 @@ struct DemoSDLEvent {
};
enum class Language {
undef = -1,
en = 0,
en_US = 1,
fr = 2,
@ -155,8 +156,10 @@ protected:
bool PlayMove (Point pos);
bool PlayUp (Point pos);
void SetLanguage ();
void SetWindowSize (Uint8 prevScale, Uint8 newScale);
Language GetStartLanguage ();
Language GetLanguage ();
void SetLanguage (Language lang = Language::undef);
void SetWindowSize (Uint8 prevScale, Uint8 newScale);
void ChangeButtons (Sint32 message);
@ -181,6 +184,7 @@ protected:
protected:
std::vector<Language> m_Languages;
std::vector<Language>::iterator m_Lang;
std::string m_LangStart;
Sint32 m_speed;
Sint32 m_exercice;
Sint32 m_mission;