Is nl_langinfo() portable enough to be used unconditionally?

Does g_locale_to_utf8() handle charset conversion correctly often enough? I'm
thinking about something like LC_TIME in latin1 and LC_MESSAGES / LC_CTYPE in
UTF-8. (I think the original code would already be suffering this.)

	* gtk/gtkcalendar.c (locales_init): Replace strftime() use with
	nl_langinfo()
---
 gtk/gtkcalendar.c |   15 ++++-----------
 1 file changed, 4 insertions(+), 11 deletions(-)

Index: gtk/gtkcalendar.c
===================================================================
--- gtk/gtkcalendar.c.orig
+++ gtk/gtkcalendar.c
@@ -34,9 +34,7 @@
 #ifdef HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
-#ifdef HAVE__NL_TIME_FIRST_WEEKDAY
 #include <langinfo.h>
-#endif
 #include <string.h>
 #include <stdlib.h>
 #include <time.h>
@@ -377,20 +375,16 @@ static void
 locales_init (void)
 {
   gint i;
-  char buffer[255];
 #ifdef G_OS_WIN32
   wchar_t wbuffer[100];
-#else
-  time_t tmp_time;
 #endif
 
   if (!default_abbreviated_dayname[0])
     for (i=0; i<7; i++)
       {
 #ifndef G_OS_WIN32
-	tmp_time= (i+3)*86400;
-	strftime ( buffer, sizeof (buffer), "%a", gmtime (&tmp_time));
-	default_abbreviated_dayname[i] = g_locale_to_utf8 (buffer, -1, NULL, NULL, NULL);
+	default_abbreviated_dayname[i] = g_locale_to_utf8 (nl_langinfo (ABDAY_1 + i), -1,
+							   NULL, NULL, NULL);
 #else
 	if (G_WIN32_HAVE_WIDECHAR_API ())
 	  {
@@ -416,9 +410,8 @@ locales_init (void)
     for (i=0; i<12; i++)
       {
 #ifndef G_OS_WIN32
-	tmp_time=i*2764800;
-	strftime ( buffer, sizeof (buffer), "%B", gmtime (&tmp_time));
-	default_monthname[i] = g_locale_to_utf8 (buffer, -1, NULL, NULL, NULL);
+	default_monthname[i] = g_locale_to_utf8 (nl_langinfo (MON_1 + i), -1,
+						 NULL, NULL, NULL);
 #else
 	if (G_WIN32_HAVE_WIDECHAR_API ())
 	  {
