Current Arabic locale definitions are so buggy with many incorrect or even missed details, as an Egyptian, I'm considering ar_EG locale but many of these details are true for other Arabic locales. #Month and Day names: current definition includes truncated month and day names as abbreviated form; thing like ينا، فبر، مار، etc. Those forms are completely non-sense in Arabic and not used any where, simply abbreviated form should be the same as complete form (like what fa_IR locale is doing) #Digits:Egypt, and most Arabic countries except Al-Maghrib Al-Arabi, uses Arabic-Indic (or Mashriqi Arabic) digits, the locale definition should reflect this, which it doesn't currently. #Date formates: currently the full date form prints like, خميس يونيو 14, it should be something like الخميس 14 يونيو, the same with other date formates, date formates also needs fixing. #Collation rules (alphabetic sorting): this needs more investigation, how we should treat WAW HAMZAH ABOVE and YEH HAMZA ABOVE; as a variant of yaa' and waw or as forms of alef? alef forms with hamza and maddah should precede or follow the normal alef? I think the better way to solve this is to find how Arabic dictionaries deal with this issue. This what I remember now, if any one knows any other issue, please tell us about it. As a work around this, I started to fix ar_EG and I think I reached an acceptable "working" level, one thing I can't figure out yet is to get full year in alt digits (٢٠٠٧ instead of 2007) I can get the short form (٠٧) but not the long one. Another problem is lack of documentation, there is very little documentation about that subject that I can find, even "man locale" isn't complete, google didn't help so much. We started a wiki page (http://wiki.arabeyes.org/الإعدادات_المحلية) to collect information about that issue, if any one knows the details about other Arabic speaking countries please add it their. Waiting for your ideas and comments. The modified ar_EG locale definition file is attached, compile is with "lacaledef" tool. -- Khaled Hosny Egyptian GNU/Linux user Member of Arabeyes team [www.arabeyes.org] My Blog: [www.khaledhosny.org] Support Free Knowledge [ar.wikipedia.org]
comment_char %
escape_char /
% Arabic language locale for Egypt.
% Contributed by Kentaroh Noji <knoji at jp dot ibm dot com> and
% Tetsuji Orita <orita at jp dot ibm dot com>, modified by
% Khaled Hosny <khaledhosny at eglug dot org>
LC_IDENTIFICATION
title "Arabic language locale for Egypt"
source "Arabeyes Project"
address ""
contact ""
email "bug-glibc-locales at gnu dot org"
tel ""
fax ""
language "Arabic"
territory "Egypt"
revision "2.0"
date "2007-05-11"
%
category "ar_EG:2007";LC_IDENTIFICATION
category "ar_EG:2007";LC_CTYPE
category "ar_EG:2007";LC_COLLATE
category "ar_EG:2007";LC_TIME
category "ar_EG:2007";LC_NUMERIC
category "ar_EG:2007";LC_MONETARY
category "ar_EG:2007";LC_MESSAGES
category "ar_EG:2007";LC_PAPER
category "ar_EG:2007";LC_NAME
category "ar_EG:2007";LC_ADDRESS
category "ar_EG:2007";LC_TELEPHONE
END LC_IDENTIFICATION
LC_CTYPE
copy "i18n"
% Arabic uses the alternate (ARABIC-INDIC) digits U0660..U0669
outdigit <U0660>..<U0669>
% This is used in the scanf family of functions to read Arabic numbers
% using "%Id" and such.
map to_inpunct; /
(<U0030>,<U0660>); /
(<U0031>,<U0661>); /
(<U0032>,<U0662>); /
(<U0033>,<U0663>); /
(<U0034>,<U0664>); /
(<U0035>,<U0665>); /
(<U0036>,<U0666>); /
(<U0037>,<U0667>); /
(<U0038>,<U0668>); /
(<U0039>,<U0669>); /
(<U002E>,<U06D4>); /
(<U002C>,<U060C>)
% This is used in the printf family of functions to write Arabic floating
% point numbers using "%If" and such.
map to_outpunct; /
(<U002E>,<U066B>); /
(<U002C>,<U066C>)
translit_start
include "translit_combining";""
translit_end
END LC_CTYPE
LC_COLLATE
% Copy the template from ISO/IEC 14651
copy "iso14651_t1"
END LC_COLLATE
LC_MONETARY
% This is the POSIX Locale definition the LC_MONETARY category.
% These are generated based on XML base Locale difintion file
% for IBM Class for Unicode/Java
%
int_curr_symbol "<U0045><U0047><U0050><U0020>" % "EGP "
currency_symbol "<U062C><U002E><U0645><U002E>" % "ج.م."
mon_decimal_point "<U066B>" %
mon_thousands_sep "<U066B>" %
mon_grouping 3
positive_sign ""
negative_sign "<U002D>" % "-"
int_frac_digits 3
frac_digits 3
p_cs_precedes 0
p_sep_by_space 1
n_cs_precedes 0
n_sep_by_space 1
p_sign_posn 1
n_sign_posn 2
%
END LC_MONETARY
LC_NUMERIC
% This is the POSIX Locale definition for the LC_NUMERIC category.
%
decimal_point "<U002E>" %
thousands_sep "<U066B>" %
grouping 3
%
END LC_NUMERIC
LC_TIME
% Alternative digits are used for Arabic numerals in date and time. This is
% a hack, until a new prefix is defined for alternative digits.
alt_digits "<U0660><U0660>";"<U0660><U0661>";/
"<U0660><U0662>";"<U0660><U0663>";/
"<U0660><U0664>";"<U0660><U0665>";/
"<U0660><U0666>";"<U0660><U0667>";/
"<U0660><U0668>";"<U0660><U0669>";/
"<U0661><U0660>";"<U0661><U0661>";/
"<U0661><U0662>";"<U0661><U0663>";/
"<U0661><U0664>";"<U0661><U0665>";/
"<U0661><U0666>";"<U0661><U0667>";/
"<U0661><U0668>";"<U0661><U0669>";/
"<U0662><U0660>";"<U0662><U0661>";/
"<U0662><U0662>";"<U0662><U0663>";/
"<U0662><U0664>";"<U0662><U0665>";/
"<U0662><U0666>";"<U0662><U0667>";/
"<U0662><U0668>";"<U0662><U0669>";/
"<U0663><U0660>";"<U0663><U0661>";/
"<U0663><U0662>";"<U0663><U0663>";/
"<U0663><U0664>";"<U0663><U0665>";/
"<U0663><U0666>";"<U0663><U0667>";/
"<U0663><U0668>";"<U0663><U0669>";/
"<U0664><U0660>";"<U0664><U0661>";/
"<U0664><U0662>";"<U0664><U0663>";/
"<U0664><U0664>";"<U0664><U0665>";/
"<U0664><U0666>";"<U0664><U0667>";/
"<U0664><U0668>";"<U0664><U0669>";/
"<U0665><U0660>";"<U0665><U0661>";/
"<U0665><U0662>";"<U0665><U0663>";/
"<U0665><U0664>";"<U0665><U0665>";/
"<U0665><U0666>";"<U0665><U0667>";/
"<U0665><U0668>";"<U0665><U0669>";/
"<U0666><U0660>";"<U0666><U0661>";/
"<U0666><U0662>";"<U0666><U0663>";/
"<U0666><U0664>";"<U0666><U0665>";/
"<U0666><U0666>";"<U0666><U0667>";/
"<U0666><U0668>";"<U0666><U0669>";/
"<U0667><U0660>";"<U0667><U0661>";/
"<U0667><U0662>";"<U0667><U0663>";/
"<U0667><U0664>";"<U0667><U0665>";/
"<U0667><U0666>";"<U0667><U0667>";/
"<U0667><U0668>";"<U0667><U0669>";/
"<U0668><U0660>";"<U0668><U0661>";/
"<U0668><U0662>";"<U0668><U0663>";/
"<U0668><U0664>";"<U0668><U0665>";/
"<U0668><U0666>";"<U0668><U0667>";/
"<U0668><U0668>";"<U0668><U0669>";/
"<U0669><U0660>";"<U0669><U0661>";/
"<U0669><U0662>";"<U0669><U0663>";/
"<U0669><U0664>";"<U0669><U0665>";/
"<U0669><U0666>";"<U0669><U0667>";/
"<U0669><U0668>";"<U0669><U0669>"
% Arabic doesn't have abbreviations for weekdays and month names, so
% "abday" is the same as "day" and "abmon" is the same as "mon"
% Abbreviated weekday names (%a)
abday "<U0623><U062D><U062F>";/
"<U0627><U062B><U0646><U064A><U0646>";/
"<U062B><U0644><U0627><U062B><U0627><U0621>";/
"<U0623><U0631><U0628><U0639><U0627><U0621>";/
"<U062E><U0645><U064A><U0633>";/
"<U062C><U0645><U0639><U0629>";/
"<U0633><U0628><U062A>"
%
% Full weekday names (%A)
day "<U0627><U0644><U0623><U062D><U062F>";/
"<U0627><U0644><U0627><U062B><U0646><U064A><U0646>";/
"<U0627><U0644><U062B><U0644><U0627><U062B><U0627><U0621>";/
"<U0627><U0644><U0623><U0631><U0628><U0639><U0627><U0621>";/
"<U0627><U0644><U062E><U0645><U064A><U0633>";/
"<U0627><U0644><U062C><U0645><U0639><U0629>";/
"<U0627><U0644><U0633><U0628><U062A>"
%
% Abbreviated month names (%b)
abmon "<U064A><U0646><U0627><U064A><U0631>";/
"<U0641><U0628><U0631><U0627><U064A><U0631>";/
"<U0645><U0627><U0631><U0633>";/
"<U0623><U0628><U0631><U064A><U0644>";/
"<U0645><U0627><U064A><U0648>";/
"<U064A><U0648><U0646><U064A><U0648>";/
"<U064A><U0648><U0644><U064A><U0648>";/
"<U0623><U063A><U0633><U0637><U0633>";/
"<U0633><U0628><U062A><U0645><U0628><U0631>";/
"<U0623><U0643><U062A><U0648><U0628><U0631>";/
"<U0646><U0648><U0641><U0645><U0628><U0631>";/
"<U062F><U064A><U0633><U0645><U0628><U0631>"
%
% Full month names (%B)
mon "<U064A><U0646><U0627><U064A><U0631>";/
"<U0641><U0628><U0631><U0627><U064A><U0631>";/
"<U0645><U0627><U0631><U0633>";/
"<U0623><U0628><U0631><U064A><U0644>";/
"<U0645><U0627><U064A><U0648>";/
"<U064A><U0648><U0646><U064A><U0648>";/
"<U064A><U0648><U0644><U064A><U0648>";/
"<U0623><U063A><U0633><U0637><U0633>";/
"<U0633><U0628><U062A><U0645><U0628><U0631>";/
"<U0623><U0643><U062A><U0648><U0628><U0631>";/
"<U0646><U0648><U0641><U0645><U0628><U0631>";/
"<U062F><U064A><U0633><U0645><U0628><U0631>"
%
% Equivalent of AM PM
am_pm "<U0635>";"<U0645>"
%
% Appropriate date and time representation (%c)
% "<RLE>%A %Oe %B %Oy<ARABIC COMMA> %OI:%OM:%OS<PDF>"
d_t_fmt "<U202B><U0025><U0041><U0020>/
<U0025><U004F><U0065><U0020>/
<U0025><U0042><U0020>/
<U0025><U004F><U0079><U060C><U0020>/
<U0025><U004F><U0049><U003A>/
<U0025><U004F><U004D><U003A>/
<U0025><U004F><U0053><U202C>"
%
% Appropriate date representation (%x)
% "%Oy/%Om/%Od"
d_fmt "<U0025><U004F><U0079><U002F>/
<U0025><U004F><U006D><U002F>/
<U0025><U004F><U0064>"
%
% Appropriate time representation (%X)
% "%OI:%OM:%OS"
t_fmt "<U0025><U004F><U0049><U003A>/
<U0025><U004F><U004D><U003A>/
<U0025><U004F><U0053>"
%
% Appropriate 12 h time representation (%r)
% "%OI:%OM:%OS %p"
t_fmt_ampm "<U0025><U004F><U0049><U003A><U0025><U004F><U004D>/
<U003A><U0025><U004F><U0053><U0020><U0025><U0070>"
%
% Appropriate date representation (date(1)) "%a %b %e %H:%M:%S %Z %Y"
% "<RLE>%A %Oe %B %Y<ARABIC COMMA> %OI:%OM:%OS (%Z)<PDF>"
date_fmt "<U202B><U0025><U0041><U0020>/
<U0025><U004F><U0065><U0020>/
<U0025><U0042><U0020>/
<U0025><U0059><U060C><U0020>/
<U0025><U004F><U0049><U003A>/
<U0025><U004F><U004D><U003A>/
<U0025><U004F><U0053><U0020>/
<U0028><U0025><U005A><U0029><U202C>"
first_weekday 7
first_workday 7
END LC_TIME
LC_MESSAGES
yesexpr "<U005E><U005B><U0646><U0079><U0059><U005D><U002E><U002A>"
noexpr "<U005E><U005B><U0644><U006E><U004E><U005D><U002E><U002A>"
yesstr "<U0646><U0639><U0645>"
nostr "<U0644><U0627>"
END LC_MESSAGES
LC_PAPER
% This is the ISO_IEC TR14652 Locale definition for the
% LC_PAPER category
height 297
width 210
END LC_PAPER
LC_NAME
% This is the ISO_IEC TR14652 Locale definition for the
% LC_NAME category.
%
name_fmt "<U0025><U0070><U0025><U0074><U0025><U0066><U0025><U0074>/
<U0025><U0067>"
name_gen "<U002D><U0073><U0061><U006E>"
name_mr "<U0633><U064A><U062F>"
name_mrs "<U0633><U064A><U062F><U0629>"
name_miss "<U0622><U0646><U0633><U0629>"
name_ms "<U0622><U0646><U0633><U0629>"
END LC_NAME
LC_ADDRESS
% This is the ISO_IEC TR14652 Locale definition for the
% LC_ADDRESS
postal_fmt "<U0025><U007A><U0025><U0063><U0025><U0054><U0025><U0073>/
<U0025><U0062><U0025><U0065><U0025><U0072>"
country_name "<U0645><U0635><U0631>"
country_ab2 "<U0045><U0047>"
country_ab3 "<U0045><U0047><U0059>"
country_num 818
country_isbn "<U0037><U0037><U0037>"
lang_name "<U0639><U0631><U0628><U064A>"
END LC_ADDRESS
LC_TELEPHONE
% This is the ISO_IEC TR14652 Locale definition for the
%
tel_int_fmt "<U002B><U0025><U0063><U0020><U003B><U0025><U0061><U0020>/
<U003B><U0025><U006C>"
int_prefix "<U0032><U0030>"
int_select "<U0030><U0030>"
END LC_TELEPHONE
LC_MEASUREMENT
% This is the ISO_IEC TR14652 Locale definition for the
%
measurement 1
END LC_MEASUREMENT
Attachment:
pgpY7aXdHD6OC.pgp
Description: PGP signature