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.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Italian Language Locale for Italy with Euro
% Language: it
% Territory: IT
% Option: euro
% Date: 2000-08-20
% Users: general
% Charset: ISO-8859-15
% Distribution and use is free, also
% for commercial purposes.

LC_IDENTIFICATION
title      "Italian locale for Italy with Euro"
source     "Free Software Foundation, Inc."
address    "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA"
contact    ""
email      "bug-glibc@gnu.org"
tel        ""
fax        ""
language   "Italian"
territory  "Italy"
revision   "1.0"
date       "2000-08-20"
%
category  "it_IT@euro:2000";LC_IDENTIFICATION
category  "it_IT@euro:2000";LC_CTYPE
category  "it_IT@euro:2000";LC_COLLATE
category  "it_IT@euro:2000";LC_TIME
category  "it_IT@euro:2000";LC_NUMERIC
category  "it_IT@euro:2000";LC_MONETARY
category  "it_IT@euro:2000";LC_MESSAGES
category  "it_IT@euro:2000";LC_PAPER
category  "it_IT@euro:2000";LC_NAME
category  "it_IT@euro:2000";LC_ADDRESS
category  "it_IT@euro:2000";LC_TELEPHONE

END LC_IDENTIFICATION

LC_COLLATE
copy "iso14651_t1"
END LC_COLLATE

LC_CTYPE
copy "i18n"
END LC_CTYPE

LC_MESSAGES
copy "it_IT"
END LC_MESSAGES

LC_MONETARY
int_curr_symbol           "<U0045><U0055><U0052><U0020>"
currency_symbol           "<U20AC>"
mon_decimal_point         "<U002C>"
mon_thousands_sep         "<U002E>"
mon_grouping              3;3
positive_sign             ""
negative_sign             "<U002D>"
int_frac_digits           0
frac_digits               0
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
copy "it_IT"
END LC_NUMERIC

LC_TIME
copy "it_IT"
END LC_TIME

LC_PAPER
copy "it_IT"
END LC_PAPER

LC_TELEPHONE
copy "it_IT"
END LC_TELEPHONE

LC_MEASUREMENT
copy "it_IT"
END LC_MEASUREMENT

LC_NAME
copy "it_IT"
END LC_NAME

LC_ADDRESS
copy "it_IT"
END LC_ADDRESS
