#include #include #include #include struct locale_dependent_values { char numeric[100]; char time[100]; }; int main () { struct locale_dependent_values expected_results; struct locale_dependent_values results; locale_t mixed1; /* Set up a locale which is a mix between different system locales. */ setlocale (LC_ALL, "en_US.UTF-8"); setlocale (LC_NUMERIC, "de_DE.UTF-8"); setlocale (LC_TIME, "fr_FR.UTF-8"); snprintf (expected_result.numeric, sizeof (expected_result.numeric), "%g", 3.5); /* expected_result.numeric is usually "3,5" */ strcpy (expected_result.time, nl_langinfo (MON_1)); /* expected_result.time is usually "janvier" */ /* Save the locale in a locale_t object. */ mixed1 = duplocale (LC_GLOBAL_LOCALE); if (mixed1 == NULL) return 1; /* Now use the saved locale mixed1. */ snprintf_l (result.numeric, sizeof (result.numeric), mixed1, "%g", 3.5); /* result.numeric is usually "3,5" */ strcpy (result.time, nl_langinfo_l (MON_1, mixed1)); /* result.time is usually "janvier" */ if (strcmp (results.numeric, expected_results.numeric) != 0) return 2; if (strcmp (results.time, expected_results.time) != 0) return 3; return 0; }