comment_char    %
escape_char     /
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Licensed to the Apache Software  Foundation (ASF) under one or more
% contributor  license agreements.  See  the NOTICE  file distributed
% with  this  work  for  additional information  regarding  copyright
% ownership.   The ASF  licenses this  file to  you under  the Apache
% License, Version  2.0 (the  License); you may  not use  this file  
% except in  compliance with the License.   You may obtain  a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the  License is distributed on an  "AS IS" BASIS,
% WITHOUT  WARRANTIES OR CONDITIONS  OF ANY  KIND, either  express or
% implied.   See  the License  for  the  specific language  governing
% permissions and limitations under the License.
%
% Copyright 1999-2007 Rogue Wave Software, Inc.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Contributed by Kentaro Noji   (knoji@jp.ibm.com)
% Tetsuji Oriata (Oriata@jp.ibm.com) and Others, 2000

LC_IDENTIFICATION

title       "Arabic language locale for India"
source     "IBM Globalization Center of Competency, Yamato Software Laboratory"
address    "1623-14, Shimotsuruma, Yamato-shi, Kanagawa-ken, 242-8502, Japan"
contact    ""
email      "bug-glibc@gnu.org"
tel         ""
fax         ""
language    "Arabic"
territory   "India"
revision    "1.0"
date        "2000,October,27 (XML source:2000,July,20)"
%
category  "ar_IN:2000";LC_IDENTIFICATION
category  "ar_IN:2000";LC_CTYPE
category  "ar_IN:2000";LC_COLLATE
category  "ar_IN:2000";LC_TIME
category  "ar_IN:2000";LC_NUMERIC
category  "ar_IN:2000";LC_MONETARY
category  "ar_IN:2000";LC_MESSAGES
category  "ar_IN:2000";LC_PAPER
category  "ar_IN:2000";LC_NAME
category  "ar_IN:2000";LC_ADDRESS
category  "ar_IN:2000";LC_TELEPHONE


END LC_IDENTIFICATION


LC_CTYPE
copy "i18n"
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
% generated by IBM Basic CountryPack Transformer.
% These are generated based on XML base Locale defintion file 
% for IBM Class for Unicode.
%
int_curr_symbol       "<U0049><U004E><U0052><U0020>"
currency_symbol       "<U20A8>"
mon_decimal_point     "<U002E>"
mon_thousands_sep     "<U002C>"
mon_grouping          3;2
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           1
n_sign_posn           1
%
END LC_MONETARY


LC_NUMERIC
% This is the POSIX Locale definition for the LC_NUMERIC  category.
%
decimal_point          "<U002E>"
thousands_sep          "<U002C>"
grouping               3;2
%
END LC_NUMERIC


LC_TIME
% This is the POSIX Locale definition for the LC_TIME category
% generated by IBM Basic CountryPack Transformer.
% These are generated based on XML base Locale difintion file 
% for IBM Class for Unicode.
%
% Abbreviated weekday names (%a)
abday       "<U062D>";"<U0646>";/
            "<U062B>";"<U0631>";/
            "<U062E>";"<U062C>";/
            "<U0633>"
%
% 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>";"<U0641><U0628><U0631>";/
            "<U0645><U0627><U0631>";"<U0623><U0628><U0631>";/
            "<U0645><U0627><U064A>";"<U064A><U0648><U0646>";/
            "<U064A><U0648><U0644>";"<U0623><U063A><U0633>";/
            "<U0633><U0628><U062A>";"<U0623><U0643><U062A>";/
            "<U0646><U0648><U0641>";"<U062F><U064A><U0633>"
%
% 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 
% %A %d %B %Y %I:%M:%S  %Z
d_t_fmt     "<U0025><U0041><U0020><U0025><U0064><U0020><U0025><U0042><U0020><U0025><U0059><U0020><U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0070><U0020><U0025><U005A>"
%
% Appropriate date representation 
% %A %d %B %Y
d_fmt       "<U0025><U0041><U0020><U0025><U0064><U0020><U0025><U0042><U0020><U0025><U0059>"
%
% Appropriate time representation 
% %I:%M:%S  %Z
t_fmt       "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0020><U0025><U005A>"
%
% Appropriate 12 h time representation (%r) 
t_fmt_ampm  "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U0070><U0020><U0025><U005A>"
%
END LC_TIME


LC_MESSAGES
% This is the POSIX Locale definition for the LC_MESSAGES category
% generated by IBM Basic CountryPack Transformer.
% These are generated based on XML base Locale difintion file
% for IBM Class for Unicode.
%
% ^[\u0646]
yesexpr     "<U005E><U005B><U0646><U005D>"

% Syntax on Unicode Regular Expression Guidelines TR#18 
% yesexpr     "<U005E><U005B><U005C><U0075><U0030><U0036><U0034><U0036><U005D>"

%
% ^[\u0644]
noexpr      "<U005E><U005B><U0644><U005D>"

% Syntax on Unicode Regular Expression Guidelines TR#18 
% noexpr      "<U005E><U005B><U005C><U0075><U0030><U0036><U0034><U0034><U005D>"
%

% \u0646\u0639\u0645
yesstr      "<U0646><U0639><U0645>"
%
% \u0644\u0627
nostr       "<U0644><U0627>"
%
END LC_MESSAGES


LC_PAPER
% This is the ISO_IEC TR14652 Locale definition for the LC_PAPER category
% generated by IBM Basic CountryPack Transformer.
height      297
width       210

END LC_PAPER


LC_NAME
% This is the ISO_IEC TR14652 Locale definition for the LC_NAME category
% generated by IBM Basic CountryPack Transformer.
% 
% 
name_fmt    "<U0025><U0070><U0025><U0074><U0025><U0066><U0025><U0074><U0025><U0067>"
name_gen    ""
name_mr     "<U004D><U0072><U002E>"
name_mrs    "<U004D><U0072><U0073><U002E>"
name_miss   "<U004D><U0069><U0073><U0073><U002E>"
name_ms     "<U004D><U0073><U002E>"

END LC_NAME


LC_ADDRESS
% This is the ISO_IEC TR14652 Locale definition for the LC_ADDRESS category
% generated by IBM Basic CountryPack Transformer.
postal_fmt  "<U0025><U007A><U0025><U0063><U0025><U0054><U0025><U0073><U0025><U0062><U0025><U0065><U0025><U0072>"

END LC_ADDRESS


LC_TELEPHONE
% This is the ISO_IEC TR14652 Locale definition for the LC_TELEPHONE
% generated by IBM Basic CountryPack Transformer.
tel_int_fmt "<U002B><U0025><U0063><U0020><U003B><U0025><U0061><U0020><U003B><U0025><U006C>"

END LC_TELEPHONE


LC_MEASUREMENT
% This is the ISO_IEC TR14652 Locale definition for the LC_MEASUREMENT
% category generated by IBM Basic CountryPack Transformer.
measurement 1

END LC_MEASUREMENT



