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.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Amharic language locale for Ethiopia.
% Contributed by Daniel Yacob <yacob@geez.org>
% Charset: UTF-8

LC_IDENTIFICATION
title      "Amharic language locale for Ethiopia"
source     "Ge'ez Frontier Foundation"
address    "501 S Taylor St., Arlington, VA 22204, USA"
contact    ""
email      "locales@geez.org"
tel        ""
fax        ""
language   "Amharic"
territory  "Ethiopia"
revision   "0.1"
date       "2000-12-08"
%
category  "am_ET:2000";LC_IDENTIFICATION
category  "am_ET:2000";LC_CTYPE
category  "am_ET:2000";LC_COLLATE
category  "am_ET:2000";LC_TIME
category  "am_ET:2000";LC_NUMERIC
category  "am_ET:2000";LC_MONETARY
category  "am_ET:2000";LC_MESSAGES
category  "am_ET:2000";LC_PAPER
category  "am_ET:2000";LC_NAME
category  "am_ET:2000";LC_ADDRESS
category  "am_ET:2000";LC_TELEPHONE

END LC_IDENTIFICATION


LC_CTYPE
copy "i18n"
space <U1361>
translit_start
include "translit_et";""
translit_end
END LC_CTYPE


LC_COLLATE

% Copy the template from ISO/IEC 14651
copy "iso14651_t1"

% Correct Unicode Addressing
script <ETHIOPIC>
order_start <ETHIOPIC>;forward
# qW qWi
<U124D>
<U124A>
# QW QWi
<U125D>
<U125A>
# hW hWi
<U128D>
<U128A>
# kW kWi
<U12B5>
<U12B2>
# KW KWi
<U12C5>
<U12C2>
# gW gWi
<U1315>
<U1312>
order_end
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><U0054><U0042><U0020>"
currency_symbol       "<U0024>"
mon_decimal_point     "<U002E>"
mon_thousands_sep     "<U002C>"
mon_grouping          3
positive_sign         ""
negative_sign         "<U002D>"
int_frac_digits       2
frac_digits           2
p_cs_precedes         1
p_sep_by_space        0
n_cs_precedes         1
n_sep_by_space        0
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;3
%
END LC_NUMERIC


LC_TIME
% This is the POSIX Locale definition for the LC_TIME category.
% These are generated based on XML base Locale difintion file
% for IBM Class for Unicode/Java
%
% Abbreviated weekday names (%a)
abday       "<U12A5><U1211><U12F5>";/
            "<U1230><U129E>";/
            "<U121B><U12AD><U1230><U129E>";/
            "<U1228><U1261><U12D5>";/
            "<U1210><U1219><U1235>";/
            "<U12D3><U122D><U1265>";/
            "<U1245><U12F3><U121C>"
%
% Full weekday names (%A)
day         "<U12A5><U1211><U12F5>";/
            "<U1230><U129E>";/
            "<U121B><U12AD><U1230><U129E>";/
            "<U1228><U1261><U12D5>";/
            "<U1210><U1219><U1235>";/
            "<U12D3><U122D><U1265>";/
            "<U1245><U12F3><U121C>"
%
% Abbreviated month names (%b)
abmon       "<U1303><U1295><U12E9>";/
            "<U134C><U1265><U1229>";/
            "<U121B><U122D><U127D>";/
            "<U12A4><U1355><U1228>";/
            "<U121C><U12ED>";/
            "<U1301><U1295>";/
            "<U1301><U120B><U12ED>";/
            "<U12A6><U1308><U1235>";/
            "<U1234><U1355><U1274>";/
            "<U12A6><U12AD><U1270>";/
            "<U1296><U126C><U121D>";/
            "<U12F2><U1234><U121D>"
%
% Full month names (%B)
mon         "<U1303><U1295><U12E9><U12C8><U122A>";/
            "<U134C><U1265><U1229><U12C8><U122A>";/
            "<U121B><U122D><U127D>";/
            "<U12A4><U1355><U1228><U120D>";/
            "<U121C><U12ED>";/
            "<U1301><U1295>";/
            "<U1301><U120B><U12ED>";/
            "<U12A6><U1308><U1235><U1275>";/
            "<U1234><U1355><U1274><U121D><U1260><U122D>";/
            "<U12A6><U12AD><U1270><U12CD><U1260><U122D>";/
            "<U1296><U126C><U121D><U1260><U122D>";/
            "<U12F2><U1234><U121D><U1260><U122D>"
am_pm   "";""
% Appropriate date and time representation (%c)
%	"%a %d %b %Y %r %Z"
% d_t_fmt "<U0025><U0061><U0020><U0025><U0064><U0020><U0025><U0062><U0020><U0025><U0059><U0020><U0025><U0072><U0020><U0025><U005A>"
d_t_fmt    "<U0025><U0041><U1363><U0020><U0025><U0062><U0020><U0025><U0065><U0020>/
<U1240><U1295>/
<U0020><U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
%
% Appropriate date representation (%x)
%	"%d/%m/%Y"
d_fmt   "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0059>"
%
% Appropriate time representation (%X)
%	"%r"
t_fmt   "<U0025><U0072>"
%
% Appropriate AM/PM time representation (%r)
%	"%I:%M:%S %p"
t_fmt_ampm "<U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U0070>"
% Equivalent of AM PM
am_pm    "<U1320><U12CB><U1275>";/
         "<U12A8><U1233><U12D3><U1275>"
%
% Appropriate date representation (date(1))   "%A, %b %e qen %l:%M:%S %Z %Y"
date_fmt    "<U0025><U0041><U1363><U0020><U0025><U0062><U0020><U0025><U0065><U0020>/
<U1240><U1295>/
<U0020><U0025><U006C><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
%
END LC_TIME


LC_MESSAGES
yesexpr "<U005E><U005B><U0079><U0059><U005D><U002E><U002A>"
noexpr  "<U005E><U005B><U006E><U004E><U005D><U002E><U002A>"
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><U0064><U0025><U0074><U0025><U0067><U0025><U0074>/
<U0025><U006D><U0025><U0074><U0025><U0066>"
name_gen    ""
name_mr     "<U12A3><U1276>"
name_mrs    "<U12C8><U0047><U122E>"
name_miss   "<U12C8><U0047><U122A><U1275>"
name_ms     "<U12C8><U0047><U122A><U1275>"
%
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  "<U12A2><U1275><U12EE><U1335><U12EB>"
country_post  "<U0045><U0054><U0048>"
country_ab2   "<U0045><U0054>"
country_ab3   "<U0045><U0054><U0048>"
country_num   231   % 210 found in at least one ISO 3166 doc
% country_car   ???
% country_isbn   Need ISO 2108
lang_name     "<U12A3><U121B><U122D><U129B>"
lang_ab       "<U0061><U006D>"
lang_term     "<U0061><U006D><U0068>"
lang_lib      "<U0061><U006D><U0068>"
%
END LC_ADDRESS


LC_TELEPHONE
% This is the ISO_IEC TR14652 Locale definition for the
%
tel_dom_fmt    "<U0025><U0061><U002D><U0025><U006C>"
tel_int_fmt    "<U0025><U0063><U002D><U0025><U0061><U002D><U0025><U006C>"
int_prefix     "<U0032><U0035><U0031>"
% int_select   get this
%
END LC_TELEPHONE


LC_MEASUREMENT
% This is the ISO_IEC TR14652 Locale definition for the
%
measurement 1
END LC_MEASUREMENT
%
