On Mar 13 08:40, Yeo Kai Wei via Cygwin wrote: > Hi All, > > May I ask if there's a bug with Cygwin and Windows currency?
The en_ZM locale isn't yet supported by Cygwin. This will change with Cygwin 3.5.0. You can install the latest Cygwin test release 3.5.0-0.231.g93f70d7849b8 and retry. You'll get the correct output: Region: en_AU.utf-8 Currency symbol: $ International currency symbol: AUD Region: en_CA.utf-8 Currency symbol: $ International currency symbol: CAD Region: en_GB.utf-8 Currency symbol: £ International currency symbol: GBP Region: en_US.utf-8 Currency symbol: $ International currency symbol: USD Region: en_NZ.utf-8 Currency symbol: $ International currency symbol: NZD Region: en_ZM.utf-8 Currency symbol: K International currency symbol: ZMW Btw., you don't even need a test application, just call $ LC_MONETARY="en_ZM.utf-8" locale -ck LC_MONETARY > The correct answer should be "Region: en_ZM.utf-8 Currency symbol: K > International currency symbol: ZMK" > > Supposedly, the code works on Linux. > > Is this an issue with Windows? We're fetching most locale information from Windows, this includes the LC_MONETARY information. However, the locale support up to Cygwin 3.4.x is restricted by an issue in Windows: Originally, locales were handled in Windows by using so called locale identifiers, LCID, 2 byte numbers. These LCIDs are used by Cygwin internally. In the meantime, Windows switched from LCIDs to locale string identifiers following RFC 4646 resp. RFC 5646. Now, the problem is this: Cygwin didn't yet follow suite, still using LCIDs internally, but Windows introduced locales for which no LCID has ever been assigned. Asking for the LCID for "en-ZW" returns 0. For Cygwin 3.5.0, I converted Cygwin to use RFC 5646 locale strings internally, too, so the next major version of Cygwin will be able to support all locales Windows supports. > while (regions[i]) > { > setlocale(LC_MONETARY, regions[i]); You're not checking for errors here. If the locale isn't supported, setlocale should return NULL... > const struct lconv* loc = localeconv(); ...and the locale information stays unchanged. As such, if en_ZM isn't supported, this call will still fetch the information of the en_NZ.utf-8 locale. HTH, Corinna -- Problem reports: https://cygwin.com/problems.html FAQ: https://cygwin.com/faq/ Documentation: https://cygwin.com/docs.html Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple