[fpc-pascal] locale solution for unix systems

Michael Van Canneyt michael at freepascal.org
Thu Mar 19 10:40:41 CET 2009



On Thu, 19 Mar 2009, Graeme Geldenhuys wrote:

> On Thu, Mar 19, 2009 at 10:55 AM, ik <idokan at gmail.com> wrote:
> > The locale itself is not just ascii based files, there are compiled
> > files, so you will require to re-implement the way of reading the data
> > inside the compiled files.
> 
> I'm not talking about the "compiled binary files", I am talking about
> the text based locale files. On my Linux Ubuntu 7.10 system they are
> include in the 'locales' package and are install in the following
> directory location:
>   /usr/share/i18n/locales/*
> 
> eg:
> usr/share/i18n/locales/wo_SN
> /usr/share/i18n/locales/xh_ZA
> /usr/share/i18n/locales/yi_US
> /usr/share/i18n/locales/zh_CN
> /usr/share/i18n/locales/zh_HK
> /usr/share/i18n/locales/zh_SG
> /usr/share/i18n/locales/zh_TW
> /usr/share/i18n/locales/zu_ZA
> 
> > For example here in Israel our first work day in the week is Sunday
> > and not Monday, so you will need to work with it. Also our date format
> > is dd/mm/yyyy and not mm/dd/yyyy or yyyy/mm/dd
> > etc.. Currency separator is comma, the actual names of things are in
> 
> Here is the details of the /usr/share/i18n/locales/he_IL file:
> 
> ----------------[ he_IL ]-----------------------
> <.....snip......>
> LC_MONETARY
> int_curr_symbol   "<U0049><U004C><U0053><U0020>"
> currency_symbol   "<U05E9><U05D7>"
> mon_decimal_point "<U002E>"
> mon_thousands_sep "<U002C>"
> mon_grouping      3;3
> positive_sign     ""
> negative_sign     "<U002D>"
> int_frac_digits   2
> frac_digits       2
> p_cs_precedes     1
> p_sep_by_space    1
> n_cs_precedes     1
> n_sep_by_space    1
> p_sign_posn       2
> n_sign_posn       2
> END LC_MONETARY
> 
> <.....snip....>
> 
> LC_TIME
> <...snip....>
> d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0079>"
> t_fmt   "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"
> first_weekday 1
> END LC_TIME
> 
> <....snip....>
> ----------------------[  end  ]---------------
> 
> 
> For example: South Africa's date format is also dd/mm/yyyy and is
> defined as follows:
> 
> % Date representation to be referenced by the "%x" field descriptor -
> % "%d/%m/%Y", day/month/year as decimal numbers (01/01/2000).
> d_fmt       "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0059>"
> 
> > Hebrew, so for each locale you will require to re-implement all of
> > this rules. That's why using the libc functions is better.
> 
> All the locale information seems to be in those text files (date,
> time, paper size, day;week;month names, measurements, names, addresses
>  etc.). It's just a matter of parsing them and populating the locale
> variables in FPC. No external programs or libraries are required.
> 
> As per fpGUI Toolkit's design rules: I hate 3rd party requirements!  :-)
> 
> BTW: Does FPC's locale variables cover all the locale categories? For example:
> 
> category  "en_ZA:2003";LC_IDENTIFICATION
> category  "en_ZA:2000";LC_CTYPE
> category  "en_ZA:2000";LC_COLLATE
> category  "en_ZA:2003";LC_TIME
> category  "en_ZA:2000";LC_NUMERIC
> category  "en_ZA:2000";LC_MONETARY
> category  "en_ZA:2003";LC_MESSAGES
> category  "en_ZA:2000";LC_PAPER
> category  "en_ZA:2000";LC_MEASUREMENT
> category  "en_ZA:2003";LC_NAME
> category  "en_ZA:2003";LC_ADDRESS
> category  "en_ZA:2003";LC_TELEPHONE
> 
> If not, can we extend the FPC locale variable to include salutation
> (names), telephone, measurement, paper sizes etc..

In that case I think we better start a 'locale' unit. I don't want to
burden SysUtils with even more stuff.

Michael.



More information about the fpc-pascal mailing list