stdcxx-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Martin Sebor <se...@roguewave.com>
Subject Re: [PATCH] util locale
Date Fri, 28 Sep 2007 02:07:43 GMT
Farid Zaripov wrote:
>   Below is a patch to localedef utility to obtain list of system locales
> if RWSTD_LOCALE_ROOT environment variable is not defined.

Cool! Thanks for doing this. I think I said I would but spaced
it. As before, please wait until I'm done with the merge. I was
hoping to be done today but because of the svn snags it'll have
to wait till tomorrow. I've had enough for one day!

Martin

> 
>   ChangeLog:
>   * locale.cpp [_WIN32] (EnumLocales): New function to enumerate system
> locales.
>   (print_locale_names): Obtain list of system locales if
> RWSTD_LOCALE_ROOT
>   environment variable is not defined.
> 
> Index: locale.cpp
> ===================================================================
> --- locale.cpp	(revision 579898)
> +++ locale.cpp	(working copy)
> @@ -2361,6 +2361,38 @@
>  }
>  
>  
> +#ifdef _WIN32
> +static BOOL CALLBACK
> +EnumLocales (char* locale_id)
> +{
> +    const LCID lcid = std::strtoul (locale_id, 0, 16);
> +
> +    char buf [80];
> +    const int bufsize = sizeof (buf) / sizeof (*buf);
> +
> +    std::string name;
> +
> +    if (GetLocaleInfo (lcid, LOCALE_SENGLANGUAGE, buf, bufsize))
> +        name = buf;
> +
> +    if (GetLocaleInfo (lcid, LOCALE_SENGCOUNTRY, buf, bufsize)) {
> +        name += '_';
> +        name += buf;
> +    }
> +
> +    if (   GetLocaleInfo (lcid, LOCALE_IDEFAULTANSICODEPAGE , buf,
> bufsize)
> +        && std::strtoul (buf, 0, 10)) {
> +        name += '.';
> +        name += buf;
> +    }
> +
> +    if (const char* locname = std::setlocale (LC_ALL, name.c_str ()))
> +        std::cout << locname << '\n';
> +
> +    return TRUE;
> +}
> +#endif
> +
>  // print the available locales
>  static void
>  print_locale_names ()
> @@ -2374,6 +2406,13 @@
>  
>          std::system (cmd.c_str ());
>      }
> +    else {
> +#ifndef _WIN32
> +        std::system ("/usr/bin/locale -a");
> +#else
> +        EnumSystemLocales (EnumLocales, LCID_INSTALLED);
> +#endif
> +    }
>  }
>  
>   
> Farid.


Mime
View raw message