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

LC_IDENTIFICATION
title      "Malay language locale for Malaysia"
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    "Malay"
territory   "Malaysia"
revision    "0.92b"
date        "2000,September,4 (XML source:2000,July,20)"
%
category  "ms_MY:2000";LC_IDENTIFICATION
category  "ms_MY:2000";LC_CTYPE
category  "ms_MY:2000";LC_COLLATE
category  "ms_MY:2000";LC_TIME
category  "ms_MY:2000";LC_NUMERIC
category  "ms_MY:2000";LC_MONETARY
category  "ms_MY:2000";LC_MESSAGES
category  "ms_MY:2000";LC_PAPER
category  "ms_MY:2000";LC_NAME
category  "ms_MY:2000";LC_ADDRESS
category  "ms_MY: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       "<U004D><U0059><U0052><U0020>"
currency_symbol       "<U0052>"
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           0
%
END LC_MONETARY


LC_NUMERIC
% This is the POSIX Locale definition for the LC_NUMERIC category
% generated by IBM Basic CountryPack Transformer.
% These are generated based on XML base Locale defintion file 
% for IBM Class for Unicode.
%
decimal_point          "<U002E>"
thousands_sep          "<U002C>"
grouping               3
%
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       "<U0041><U0068><U0061>";"<U0049><U0073><U006E>";/
            "<U0053><U0065><U006C>";"<U0052><U0061><U0062>";/
            "<U004B><U0068><U0061>";"<U004A><U0075><U006D>";/
            "<U0053><U0061><U0062>"
%
% Full weekday names (%A)
day         "<U0041><U0068><U0061><U0064>";"<U0049><U0073><U006E><U0069><U006E>";/
            "<U0053><U0065><U006C><U0061><U0073><U0061>";"<U0052><U0061><U0068><U0062>";/
            "<U004B><U0068><U0061><U006D><U0069><U0073>";"<U004A><U0075><U006D><U0061><U0061><U0074>";/
            "<U0053><U0061><U0062><U0074><U0075>"
%
% Abbreviated month names (%b)
abmon       "<U004A><U0061><U006E>";"<U0046><U0065><U0062>";/
            "<U004D><U0061><U0063>";"<U0041><U0070><U0072>";/
            "<U004D><U0065><U0069>";"<U004A><U0075><U006E>";/
            "<U004A><U0075><U006C>";"<U004F><U0067><U006F><U0073>";/
            "<U0053><U0065><U0070>";"<U004F><U006B><U0074>";/
            "<U004E><U006F><U0076>";"<U0044><U0069><U0073>"
%
% Full month names (%B)
mon         "<U004A><U0061><U006E><U0075><U0061><U0072><U0069>";"<U0046><U0065><U0062><U0072><U0075><U0061><U0072><U0069>";/
            "<U004D><U0061><U0063>";"<U0041><U0070><U0072><U0069><U006C>";/
            "<U004D><U0065><U0069>";"<U004A><U0075><U006E>";/
            "<U004A><U0075><U006C><U0061><U0069>";"<U004F><U0067><U006F><U0073>";/
            "<U0053><U0065><U0070><U0074><U0065><U006D><U0062><U0065><U0072>";"<U004F><U006B><U0074><U006F><U0062><U0065><U0072>";/
            "<U004E><U006F><U0076><U0065><U006D><U0062><U0065><U0072>";"<U0044><U0069><U0073><U0065><U006D><U0062><U0065><U0072>"
%
% Equivalent of AM PM 
am_pm       "";""
%
% Appropriate date and time representation 
% %A %d %b %Y %I:%M:%S  %Z
d_t_fmt     "<U0025><U0041><U0020><U0025><U0064><U0020><U0025><U0062><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><U0062><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><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



