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

View File

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