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

LC_IDENTIFICATION
title      "Arabic language locale for Morocco"
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  "Morocco"
revision   "1.0"
date       "2000-07-20"
%
category  "ar_MA:2000";LC_IDENTIFICATION
category  "ar_MA:2000";LC_CTYPE
category  "ar_MA:2000";LC_COLLATE
category  "ar_MA:2000";LC_TIME
category  "ar_MA:2000";LC_NUMERIC
category  "ar_MA:2000";LC_MONETARY
category  "ar_MA:2000";LC_MESSAGES
category  "ar_MA:2000";LC_PAPER
category  "ar_MA:2000";LC_NAME
category  "ar_MA:2000";LC_ADDRESS
category  "ar_MA: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.
% These are generated based on XML base Locale difintion file
% for IBM Class for Unicode/Java
%
int_curr_symbol       "<U004D><U0041><U0044><U0020>"
currency_symbol       "<U062F><U002E><U0645><U002E>"
mon_decimal_point     "<U002E>"
mon_thousands_sep     "<U002C>"
mon_grouping          3
positive_sign         ""
negative_sign         "<U002D>"
int_frac_digits       3
frac_digits           3
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           2
%
END LC_MONETARY


LC_NUMERIC
% This is the POSIX Locale definition for the LC_NUMERIC  category.
%
decimal_point          "<U002E>"
thousands_sep          "<U002C>"
grouping               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       "<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
% %d %b, %Y%Z %I:%M:%S
d_t_fmt     "<U0025><U0064><U0020><U0025><U0062><U002C><U0020><U0025>/
<U0059><U0020><U0025><U005A><U0020><U0025><U0049><U003A><U0025><U004D>/
<U003A><U0025><U0053><U0020><U0025><U0070>"
%
% Appropriate date representation
% %d %b, %Y
d_fmt       "<U0025><U0064><U0020><U0025><U0062><U002C><U0020><U0025><U0059>"
%
% Appropriate time representation
% %Z %I:%M:%S
t_fmt       "<U0025><U005A><U0020><U0025><U0049><U003A><U0025><U004D>/
<U003A><U0025><U0053><U0020>"
%
% Appropriate 12 h time representation (%r)
t_fmt_ampm  "<U0025><U005A><U0020><U0025><U0049><U003A><U0025><U004D>/
<U003A><U0025><U0053><U0020><U0025><U0070>"
%
% Appropriate date representation (date(1))   "%a %b %e %H:%M:%S %Z %Y"
date_fmt	"<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"
END LC_TIME


LC_MESSAGES
% This is the POSIX Locale definition for the LC_MESSAGES category.
% These are generated based on XML base Locale difintion file
% for IBM Class for Unicode/Java
%
yesexpr     "<U005E><U005B><U0646><U005D><U002E><U002A>"
%
noexpr      "<U005E><U005B><U0644><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><U0070><U0025><U0074><U0025><U0066><U0025><U0074>/
<U0025><U0067>"
name_gen    "<U002D><U0073><U0061><U006E>"
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
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
%
tel_int_fmt "<U002B><U0025><U0063><U0020><U003B><U0025><U0061><U0020>/
<U003B><U0025><U006C>"
int_prefix  "<U0032><U0031><U0032>"

END LC_TELEPHONE


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

END LC_MEASUREMENT
