Olivier Mueller
2006-Nov-15 20:16 UTC
linux locales to freebsd: symlink to make php setlocale() happy ?
Bonjour, While moving some more customers from a linux to a freebsd-based hosting, like some others I had a problem with php pages using setlocale(). According to 'locale -a', it looks like that for de_DE (german): Linux (suse): de_DE de_DE.utf8 de_DE@euro FreeBSD (6.1): de_DE.ISO8859-1 de_DE.ISO8859-15 de_DE.UTF-8 And in the customers code, the call which hadn't worked anymore is: setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'). I could tell the customer to update his code and add "de_DE.ISO8859-1" to his setlocale() list, but he will ask me "why isn't it like before?" and on systems with hundreds of virtualhosts (and different customers), this can't really be done. So what would be the "cleanest" solution? Is there an options somewhere to add the "standard" de_DE-like label (xx_XX) to all languages? Or should I use symlinks like: [root@bsd /usr/share/locale]# ln -s de_DE.ISO8859-1 de_DE Regards, Olivier
Oliver Fromme
2006-Nov-16 14:27 UTC
linux locales to freebsd: symlink to make php setlocale() happy ?
Olivier Mueller wrote: > While moving some more customers from a linux to a freebsd-based > hosting, like some others I had a problem with php pages using > setlocale(). > > According to 'locale -a', it looks like that for de_DE (german): > > Linux (suse): > de_DE > de_DE.utf8 > de_DE@euro > > FreeBSD (6.1): > de_DE.ISO8859-1 > de_DE.ISO8859-15 > de_DE.UTF-8 There's no standard for locale names (and it shouldn't be necessary anyway). > And in the customers code, the call which hadn't worked anymore is: > setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge'). It's bad design to hardcode locale names in programs. It's much better (and standard practice) to pick up the locale from the environment variables, so they can be configured in the environment, without having to hack the program. > I could tell the customer to update his code and add "de_DE.ISO8859-1" > to his setlocale() list, You could also tell the customer to fix that crap and use environment variables. :-) > but he will ask me "why isn't it like before?" The answer is "because your program was written in a non- portable way and needs to be fixed". > So what would be the "cleanest" solution? The cleanest solution is certainly to fix the program. > Is there an options somewhere > to add the "standard" de_DE-like label (xx_XX) to all languages? Not that I'm aware of. It's not a standard anyway, and I even consider it bad practice because the character set specification is missing, so it's ambiguous. > Or should I use symlinks like: > [root@bsd /usr/share/locale]# ln -s de_DE.ISO8859-1 de_DE Well, that would be a work-around that should work. It's not really a "clean solution", though. Best regards Oliver -- Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing Dienstleistungen mit Schwerpunkt FreeBSD: http://www.secnetix.de/bsd Any opinions expressed in this message may be personal to the author and may not necessarily reflect the opinions of secnetix in any way. "If you aim the gun at your foot and pull the trigger, it's UNIX's job to ensure reliable delivery of the bullet to where you aimed the gun (in this case, Mr. Foot)." -- Terry Lambert, FreeBSD-hackers mailing list.