Add Windows-specific implementation to determine locale settings.
This commit is contained in:
parent
e794bb8e25
commit
563ed19f97
2 changed files with 55 additions and 4 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue