1
0
Fork 0

Add Windows-specific implementation to determine locale settings.

This commit is contained in:
ThorstenB 2012-05-06 23:15:27 +02:00
parent e794bb8e25
commit 563ed19f97
2 changed files with 55 additions and 4 deletions

View file

@ -18,6 +18,10 @@
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
#ifdef HAVE_WINDOWS_H
#include <windows.h>
#endif
#include <simgear/props/props_io.hxx>
#include <simgear/structure/exception.hxx>
@ -37,6 +41,48 @@ FGLocale::~FGLocale()
{
}
#ifdef HAVE_WINDOWS_H
/**
* Determine locale/language settings on Windows.
*
* Copyright (C) 1997, 2002, 2003 Martin von Loewis
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted,
* provided that the above copyright notice appear in all copies.
*
* This software comes with no warranty. Use at your own risk.
*/
const char*
FGLocale::getUserLanguage()
{
static char locale[100] = {0};
if (GetLocaleInfo(LOCALE_USER_DEFAULT,
LOCALE_SISO639LANGNAME,
locale, sizeof(locale)))
{
size_t i = strlen(locale);
locale[i++] = '_';
if (GetLocaleInfo(LOCALE_USER_DEFAULT,
LOCALE_SISO3166CTRYNAME,
locale+i, (int)(sizeof(locale)-i)))
return locale;
}
return NULL;
}
#else
/**
* Determine locale/language settings on Linux (and Mac?).
*/
const char*
FGLocale::getUserLanguage()
{
return ::getenv("LANG");
}
#endif
// Search property tree for matching locale description
SGPropertyNode*
FGLocale::findLocaleNode(const string& language)
@ -85,12 +131,12 @@ FGLocale::findLocaleNode(const string& language)
bool
FGLocale::selectLanguage(const char *language)
{
// Use environment setting when no language is given.
// Use system setting when no language is given.
if ((language == NULL)||(language[0]==0))
language = ::getenv("LANG");
language = getUserLanguage();
// Use plain C locale if nothing is available.
if (language == NULL)
if ((language == NULL)||(language[0]==0))
{
SG_LOG(SG_GENERAL, SG_INFO, "Unable to detect the language" );
language = "C";
@ -120,7 +166,7 @@ FGLocale::loadResource(SGPropertyNode* localeNode, const char* resource)
const char *path_str = stringNode->getStringValue(resource, NULL);
if (!path_str)
{
SG_LOG(SG_GENERAL, SG_ALERT, "No path in " << stringNode->getPath() << "/" << resource << ".");
SG_LOG(SG_GENERAL, SG_WARN, "No path in " << stringNode->getPath() << "/" << resource << ".");
return NULL;
}

View file

@ -72,6 +72,11 @@ public:
*/
static void utf8toLatin1 (std::string& s);
/**
* Obtain user's default language setting.
*/
const char* getUserLanguage();
protected:
/**
* Find property node matching given language.