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
|
// along with this program; if not, write to the Free Software
|
||||||
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
// 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/props/props_io.hxx>
|
||||||
#include <simgear/structure/exception.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
|
// Search property tree for matching locale description
|
||||||
SGPropertyNode*
|
SGPropertyNode*
|
||||||
FGLocale::findLocaleNode(const string& language)
|
FGLocale::findLocaleNode(const string& language)
|
||||||
|
@ -85,12 +131,12 @@ FGLocale::findLocaleNode(const string& language)
|
||||||
bool
|
bool
|
||||||
FGLocale::selectLanguage(const char *language)
|
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))
|
if ((language == NULL)||(language[0]==0))
|
||||||
language = ::getenv("LANG");
|
language = getUserLanguage();
|
||||||
|
|
||||||
// Use plain C locale if nothing is available.
|
// 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" );
|
SG_LOG(SG_GENERAL, SG_INFO, "Unable to detect the language" );
|
||||||
language = "C";
|
language = "C";
|
||||||
|
@ -120,7 +166,7 @@ FGLocale::loadResource(SGPropertyNode* localeNode, const char* resource)
|
||||||
const char *path_str = stringNode->getStringValue(resource, NULL);
|
const char *path_str = stringNode->getStringValue(resource, NULL);
|
||||||
if (!path_str)
|
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;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,11 @@ public:
|
||||||
*/
|
*/
|
||||||
static void utf8toLatin1 (std::string& s);
|
static void utf8toLatin1 (std::string& s);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Obtain user's default language setting.
|
||||||
|
*/
|
||||||
|
const char* getUserLanguage();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
/**
|
/**
|
||||||
* Find property node matching given language.
|
* Find property node matching given language.
|
||||||
|
|
Loading…
Reference in a new issue