1. locale support?
- Posted by Jeremy Cowgar <jeremy at c??gar.com> May 02, 2008
- 829 views
I finished documenting datetime.e: http://jeremy.cowgar.com/euphoria/lib_dtm.htm And it has a format function that allows you to:
d = new(2008, 5, 2, 12, 58, 32) s = format(d, "%A, %B %d '%y %H:%M%p") -- s is "Friday, May 2 '08 12:58PM"
So, the problem is not that the format function cannot support other languages (because it can), but how to deal with locale support. Right now, in datetime.e there are a few sequences titled things like: month_names, month_abbrs, day_names, day_abbrs. Those are global sequences that format() uses to populate the resulting string with. If you do not speak English, you can easily change the content of those global sequences and format will happily use your language to format the date/time. However, do we need a greater support? i.e. should I introduce a locale.e or something? For instance, the GNU C locale support has abilities for dates, times, numbers, money, etc... -- Jeremy Cowgar http://jeremy.cowgar.com
2. Re: locale support?
- Posted by Ryan W. Johnson <ryanj at fl?idae.co?> May 02, 2008
- 744 views
Yes, it would be great if the app could use format dates, times, etc. according to the OS settings. ~Ryan W. Johnson Fluid Application Environment http://www.fluidae.com/ [cool quote here, if i ever think of one...]
3. Re: locale support?
- Posted by "Euler German" <eulerg at gmail.com> May 04, 2008
- 780 views
> On 2 May 2008 at 10:18, Jeremy Cowgar wrote (maybe snipped): > > > posted by: Jeremy Cowgar <jeremy at c??gar.com> > > I finished documenting datetime.e: > > http://jeremy.cowgar.com/euphoria/lib_dtm.htm > > And it has a format function that allows you to: > > }}} <eucode> > d = new(2008, 5, 2, 12, 58, 32) > s = format(d, "%A, %B %d '%y %H:%M%p") > -- s is "Friday, May 2 '08 12:58PM" > </eucode> {{{ > > So, the problem is not that the format function cannot support other > languages (because it can), but how to deal with locale support. Right > now, in datetime.e there are a few sequences titled things like: > month_names, month_abbrs, day_names, day_abbrs. Those are global > sequences that format() uses to populate the resulting string with. > > If you do not speak English, you can easily change the content of > those global sequences and format will happily use your language to > format the date/time. However, do we need a greater support? i.e. > should I introduce a locale.e or something? > Definitely, yes! I fully support the motion and I'm voluteering to do my part in translation. All I need is original text in English and commenting for disambiguation. Question: would namespace be applicable here? So...
d = br:new(2008, 5, 2, 12, 58, 32) s = format(d, "%A, %d de %B de %Y %H:%M") -- s is "Sexta, 2 de Maio de 2008 12:58"
Best, Euler -- _ _| euler f german _| sete lagoas, mg, brazil _| efgerman{AT}gmail{DOT}com _| ----------------------------- _| Reply preferably to the list, _| or to the address above. Thx!
4. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at co??ar.com> May 04, 2008
- 764 views
I was originally thinking of providing a 100% euphoria solution, however, there are a lot of locales! So, I started in Linux, wrapped setlocale, strfmon and strftime. This gives us complete locale support in linux. You can use *any* locale that the user has installed. It'll format dates, times, currency and numbers according to that locale:
include locale.e as l include datetime.e as d d:datetime now now = d:now() l:set("en_US") printf(1, "%s, %s, %s\n", { l:datetime("%A, %B %d %Y", now), l:money(10928.2), l:number(1029.35)})
Output is: Sunday, May 4 2008, $10,928.20, 1,029.35 You can set any locale and the date language will change, the currency symbol, the thousands and decimal point, etc... The final There are two more things to do: 1. make it work in Windows, see: http://www.openeuphoria.org/EUforum/m20366.html 2. Message localization. My ideas here are to provide .ini files (cross-platform) to provide localization files: data/en_US.ini data/en_CA.ini etc... HELLO=Hello WORLD=World GREETING=%s, %s! ERROR=Error: %i %s ERR_FILE_OPEN=%s could not be opened
include locale.e as l l:set({"en_US", "data"}) puts(1, l:tr("$GREETING", {l:w("HELLO"), l:w("WORLD")})) puts(1, l:tr("$GREETING", {l:w("HELLO"), "John"})) puts(1, l:tr("$ERROR", {10, l:w("ERR_FILE_OPEN"), filename}))
Since you use the tr and w functions often, they are tiny. tr = translate, w = word or lookup word. Anyway that's where I am at. Any thoughts? -- Jeremy Cowgar http://jeremy.cowgar.com
5. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at ?owgar.?om> May 05, 2008
- 719 views
Ok, locale support now works on Windows and Linux. Please see my problem at the end of this message.
include locale.e as l include datetime.e as d d:datetime now now = d:now() l:set("en_US") printf(1, "%s, %s, %s\n", { l:datetime("%A, %B %d %Y", now), l:money(10928.2), l:number(1029.35)})
Output is: Sunday, May 4 2008, $10,928.20, 1,029.35 You can set any locale and the date language will change, the currency symbol, the thousands and decimal point, etc... The best part is it uses OS dependent locale data so we do not have to manage locale data, have to do no translations, and Euphoria can now be set for any locale that a user happens to have installed. ======== Problem ======== Locale names are different on Linux and Windows. For instance, to get the locale for United States English, on Windows you must:
l:set("English_United States")
however, under Linux you must:
l:set("en_US")
Creating a cross-walk may not be that easy but if we have to, it's still easier than translating hundreds of locales to pure Euphoria. So. Any suggestions/thoughts? -- Jeremy Cowgar http://jeremy.cowgar.com
6. Re: locale support?
- Posted by Jason Gade <jaygade at yah?o.?om> May 05, 2008
- 728 views
Well, the Linux stuff should be Posix, but if nothing else then I guess you have to wrap it in a platform() test. Are there posix-compatible functions in msvcrt.dll? -- A complex system that works is invariably found to have evolved from a simple system that works. --John Gall's 15th law of Systemantics. "Premature optimization is the root of all evil in programming." --C.A.R. Hoare j.
7. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at cowga?.?om> May 05, 2008
- 774 views
Jason Gade wrote: > > Well, the Linux stuff should be Posix, but if nothing else then I guess you > have to wrap it in a platform() test. > > Are there posix-compatible functions in msvcrt.dll? > Yes, I had a bit of trouble tracking down GetCurrencyFormatA, but finally got it. So, we now have locale support in Windows and Linux/FreeBSD. However, I still have this problem: http://www.openeuphoria.org/EUforum/m20384.html -- Jeremy Cowgar http://jeremy.cowgar.com
8. Re: locale support?
- Posted by Matt Lewis <matthewwalkerlewis at g?ai?.com> May 05, 2008
- 778 views
Jeremy Cowgar wrote: > > Ok, locale support now works on Windows and Linux. Please see my problem at > the end of this message. I notice some oddities about locale.e that were probably left in by mistake. For instance, your platform error message references IUp. Also, the setlocale and strftime imports aren't within the LINUX/BSD platform guards. More on topic, I thought Windows used LCIDs, which are numbers, rather than strings, to denote specific locales. Matt
9. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at ?owga?.com> May 05, 2008
- 804 views
Matt Lewis wrote: > > Jeremy Cowgar wrote: > > > > Ok, locale support now works on Windows and Linux. Please see my problem at > > the end of this message. > > I notice some oddities about locale.e that were probably left in by > mistake. For instance, your platform error message references IUp. Ops! That's what you get for copy/paste to saving time I've corrected it in my copy. It'll be in my next commit. > Also, the setlocale and strftime imports aren't within the LINUX/BSD > platform guards. They are the same function on both Windows and Unix systems. > > More on topic, I thought Windows used LCIDs, which are numbers, rather than > strings, to denote specific locales. > The setlocale function works the same in Windows as in Linux, it just takes different Locale names. I am no locale expert, but that's what I understand from the docs. -- Jeremy Cowgar http://jeremy.cowgar.com
10. Re: locale support?
- Posted by Bernie Ryan <xotron at bluef?og?com> May 05, 2008
- 726 views
Jeremy Cowgar wrote: > > Ok, locale support now works on Windows and Linux. Please see my problem at > the end of this message. > > }}} <eucode> > include locale.e as l > include datetime.e as d > > d:datetime now > now = d:now() > > l:set("en_US") > printf(1, "%s, %s, %s\n", { > l:datetime("%A, %B %d %Y", now), > l:money(10928.2), > l:number(1029.35)}) > </eucode> {{{ > > Output is: > > Sunday, May 4 2008, $10,928.20, 1,029.35 > > You can set any locale and the date language will change, the currency symbol, > the thousands and decimal point, etc... The best part is it uses OS dependent > locale data so we do not have to manage locale data, have to do no > translations, > and Euphoria can now be set for any locale that a user happens to have > installed. > > ======== > Problem > ======== > > Locale names are different on Linux and Windows. For instance, to get the > locale > for United States English, on Windows you must: > > }}} <eucode> > l:set("English_United States") > </eucode> {{{ > > however, under Linux you must: > > }}} <eucode> > l:set("en_US") > </eucode> {{{ > > Creating a cross-walk may not be that easy but if we have to, it's still > easier > than translating hundreds of locales to pure Euphoria. > > So. Any suggestions/thoughts? > > -- > Jeremy Cowgar > <a href="http://jeremy.cowgar.com">http://jeremy.cowgar.com</a>
global sequence LANG_US if platform() = 2 then LANG_US = "English_United States" elsif platform() = 3 then LANG_US = "en_US" end if
Bernie My files in archive: WMOTOR, XMOTOR, W32ENGIN, MIXEDLIB, EU_ENGIN, WIN32ERU, WIN32API Can be downloaded here: http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan
11. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at cow?ar.c?m> May 05, 2008
- 771 views
Bernie Ryan wrote: > > global sequence LANG_US > > if platform() = 2 then > LANG_US = "English_United States" > elsif platform() = 3 then > LANG_US = "en_US" > end if > </eucode> {{{ > I'd hate to have each programmer have to manage the cross-walk though for each locale. On my Linux box there are 373 locales. So, inside of each platform() check, you would then have to choose between 373 different locales. Now, some of those have multiple encodings to them, such as ASCII and UTF-8. But still, it's in the range of 200 or so. I am unsure how many locales Windows has and really not even sure how to figure it out. -- Jeremy Cowgar http://jeremy.cowgar.com
12. Re: locale support?
- Posted by Jason Gade <jaygade at ya?oo.c?m> May 05, 2008
- 732 views
http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm So, "en-US" doesn't work for Windows? I was looking around for locale info and from what I saw it should. Also it looks like msvcrt.dll does contain setlocale. -- A complex system that works is invariably found to have evolved from a simple system that works. --John Gall's 15th law of Systemantics. "Premature optimization is the root of all evil in programming." --C.A.R. Hoare j.
13. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at cow??r.com> May 05, 2008
- 755 views
Jason Gade wrote: > > <a > href="http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm">http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm</a> > > So, "en-US" doesn't work for Windows? I was looking around for locale info and > from what I saw it should. That's a nice list. en-us, en-US and en_US do not work. English, English_United States, English_United States.1252 all work. > Also it looks like msvcrt.dll does contain setlocale. Yes, I am using that currently for the setlocale implementation on Windows. -- Jeremy Cowgar http://jeremy.cowgar.com
14. Re: locale support?
- Posted by c.k.lester <euphoric at ckles?er?com> May 05, 2008
- 730 views
What about something like this:
integer PLATFORM PLATFORM = platform() sequence languages languages = { { "English", {"", "English_US", "en_US" }} ... } l:set("English",languages[PLATFORM])
or from an ini file of similar format.
15. Re: locale support?
- Posted by CChris <christian.cuvier at agricul?ure.gouv.?r> May 05, 2008
- 735 views
Jeremy Cowgar wrote: > > Jason Gade wrote: > > > > <a > > href="http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm">http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm</a> > > > > So, "en-US" doesn't work for Windows? I was looking around for locale info > > and > > from what I saw it should. > > That's a nice list. en-us, en-US and en_US do not work. English, > English_United > States, English_United States.1252 all work. > > > Also it looks like msvcrt.dll does contain setlocale. > > Yes, I am using that currently for the setlocale implementation on Windows. > > -- > Jeremy Cowgar > <a href="http://jeremy.cowgar.com">http://jeremy.cowgar.com</a> Why not: * convert the list linked above, or the one at http://msdn.microsoft.com/en-us/library/ms776260(VS.85).aspx into two maps, the common key eing the LCID; * Then, when user provides a string for a locale, look it up the appropriate map, chosen by a call to platform(). CChris
16. Re: locale support?
- Posted by Bernie Ryan <xotron at bluefro?.co?> May 05, 2008
- 757 views
Jeremy Cowgar wrote: > > Jason Gade wrote: > > > > <a > > href="http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm">http://www.cryer.co.uk/brian/windows/info_windows_locale_table.htm</a> > > > > So, "en-US" doesn't work for Windows? I was looking around for locale info > > and > > from what I saw it should. > > That's a nice list. en-us, en-US and en_US do not work. English, > English_United > States, English_United States.1252 all work. > > > Also it looks like msvcrt.dll does contain setlocale. > > Yes, I am using that currently for the setlocale implementation on Windows. > > -- Jeremy: You only need two strings for the English language standard library. One for Windows and one for Linux. Your standard libraries are only good for english. If a user is using MS windows in a different language then your complete standard library will have to be translated. Bernie My files in archive: WMOTOR, XMOTOR, W32ENGIN, MIXEDLIB, EU_ENGIN, WIN32ERU, WIN32API Can be downloaded here: http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan
17. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at co?gar.?om> May 05, 2008
- 724 views
Bernie Ryan wrote: > > You only need two strings for the English language standard library. > One for Windows and one for Linux. > Your standard libraries are only good for english. > If a user is using MS windows in a different language then your > complete standard library will have to be translated. > I'm not sure what you mean? The standard libraries will work in many, many languages. Some languages might might have to use UTF-8 or possibly UTF-16 encoding, but it should not be a big deal. What do you mean they will only work in English? -- Jeremy Cowgar http://jeremy.cowgar.com
18. Re: locale support?
- Posted by Bernie Ryan <xotron at blue?ro?.com> May 05, 2008
- 739 views
Jeremy Cowgar wrote: > > Bernie Ryan wrote: > > > > You only need two strings for the English language standard library. > > One for Windows and one for Linux. > > Your standard libraries are only good for english. > > If a user is using MS windows in a different language then your > > complete standard library will have to be translated. > > > > I'm not sure what you mean? The standard libraries will work in many, many > languages. > Some languages might might have to use UTF-8 or possibly UTF-16 encoding, but > it should not be a big deal. > > What do you mean they will only work in English? > > -- Jeremy: What about error messages, text in sequences, function/procedure names ? That is why Windows uses resource files they contain string tables that are compiled for different languages. Look at Igor's site: http://www.rapideuphoria.com/russian/index_r.htm Which is not in English. Bernie My files in archive: WMOTOR, XMOTOR, W32ENGIN, MIXEDLIB, EU_ENGIN, WIN32ERU, WIN32API Can be downloaded here: http://www.rapideuphoria.com/cgi-bin/asearch.exu?dos=on&win=on&lnx=on&gen=on&keywords=bernie+ryan
19. Re: locale support?
- Posted by Jeremy Cowgar <jeremy at cow?ar.c?m> May 05, 2008
- 762 views
Bernie Ryan wrote: > > > What about error messages Those are very few, and at that, there are many, many, many more that exist in Euphoria itself. Euphoria itself is not localized. > text in sequences That is what locale.e's po_load() and w() functions are for. It allows the programmer to localize their own application. > function/procedure names ? I'm not aware of any programming language that translates function names to new languages. In that area, it's still an English speaking world and it is a non-issue. > That is why Windows uses resource files they contain string tables > that are compiled for different languages. Yes. Euphoria has that now with .po files. .po is a very popular format for localization. There are many GUI based translation software packages to work with the .po file, or you can use a normal text editor for that task. > Look at Igor's site: Yup. That's not a problem with the new locale.e. Did you look at any of my examples? -- Jeremy Cowgar http://jeremy.cowgar.com