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.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% English locale for India.
% Contributed by Kentaroh Noji <knoji@jp.ibm.com> and
% Tetsuji Orita <orita@jp.ibm.com>.

LC_IDENTIFICATION
title      "English 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    "English"
territory   "India"
revision    "1.0"
date        "2000,October,27 (XML source:2000,July,20)"
%
category  "en_IN:2000";LC_IDENTIFICATION
category  "en_IN:2000";LC_CTYPE
category  "en_IN:2000";LC_COLLATE
category  "en_IN:2000";LC_TIME
category  "en_IN:2000";LC_NUMERIC
category  "en_IN:2000";LC_MONETARY
category  "en_IN:2000";LC_MESSAGES
category  "en_IN:2000";LC_PAPER
category  "en_IN:2000";LC_NAME
category  "en_IN:2000";LC_ADDRESS
category  "en_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       "<U0053><U0075><U006E>";"<U004D><U006F><U006E>";/
            "<U0054><U0075><U0065>";"<U0057><U0065><U0064>";/
            "<U0054><U0068><U0075>";"<U0046><U0072><U0069>";/
            "<U0053><U0061><U0074>"
%
% Full weekday names (%A)
day         "<U0053><U0075><U006E><U0064><U0061><U0079>";"<U004D><U006F><U006E><U0064><U0061><U0079>";/
            "<U0054><U0075><U0065><U0073><U0064><U0061><U0079>";"<U0057><U0065><U0064><U006E><U0065><U0073><U0064><U0061><U0079>";/
            "<U0054><U0068><U0075><U0072><U0073><U0064><U0061><U0079>";"<U0046><U0072><U0069><U0064><U0061><U0079>";/
            "<U0053><U0061><U0074><U0075><U0072><U0064><U0061><U0079>"
%
% Abbreviated month names (%b)
abmon       "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
            "<U004D><U0061><U0072>";"<U0041><U0070><U0072>";/
            "<U004D><U0061><U0079>";"<U004A><U0075><U006E>";/
            "<U004A><U0075><U006C>";"<U0041><U0075><U0067>";/
            "<U0053><U0065><U0070>";"<U004F><U0063><U0074>";/
            "<U004E><U006F><U0076>";"<U0044><U0065><U0063>"
%
% Full month names (%B)
mon         "<U004A><U0061><U006E><U0075><U0061><U0072><U0079>";"<U0046><U0065><U0062><U0072><U0075><U0061><U0072><U0079>";/
            "<U004D><U0061><U0072><U0063><U0068>";"<U0041><U0070><U0072><U0069><U006C>";/
            "<U004D><U0061><U0079>";"<U004A><U0075><U006E><U0065>";/
            "<U004A><U0075><U006C><U0079>";"<U0041><U0075><U0067><U0075><U0073><U0074>";/
            "<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";"<U004F><U0063><U0074><U006F><U0062><U0065><U0072>";/
            "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";"<U0044><U0065><U0063><U0065><U006D><U0062><U0065><U0072>"
%
% Equivalent of AM PM 
am_pm       "<U0041><U004D>";"<U0050><U004D>"
%
% 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.
%
% ^[yY]
yesexpr     "<U005E><U005B><U0079><U0059><U005D>"

% Syntax on Unicode Regular Expression Guidelines TR#18 
% yesexpr     "<U005E><U005B><U0079><U0059><U005D>"

%
% ^[nN]
noexpr      "<U005E><U005B><U006E><U004E><U005D>"

% Syntax on Unicode Regular Expression Guidelines TR#18 
% noexpr      "<U005E><U005B><U006E><U004E><U005D>"
%

% Yes
yesstr      "<U0059><U0065><U0073>"
%
% No
nostr       "<U004E><U006F>"
%
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><U0067><U0025><U0074><U0025><U006D><U0025><U0074><U0025><U0066>"
name_gen    ""
name_mr     "<U004D><U0072><U002E>"
name_mrs    "<U004D><U0072><U0073><U002E>"
name_miss   "<U004D><U0073><U002E>"
name_ms     ""

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
