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.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Urdu Language Locale for Pakistan
% Source:
% Contact: Shehzad Ashiq Ali, Pablo Saratxaga
% Email: shehzadashiq@hotmail.com, <pablo@mandrakesoft.com>
% Language: ur
% Territory: PK
% Revision: 0.3
% Date: 2000-07-11
% Users: general
% Charset: CP1256
% Distribution and use is free, also
% for commercial purposes.

LC_IDENTIFICATION
title      "Urdu Language Locale for Pakistan"
source     ""
address    ""
contact    ""
email      "bug-glibc@gnu.org"
tel        ""
fax        ""
language   "Urdu"
territory  "Pakistan"
revision   "0.3"
date       "2000-07-11"
%
category  "ur_PK:2000";LC_IDENTIFICATION
category  "ur_PK:2000";LC_CTYPE
category  "ur_PK:2000";LC_COLLATE
category  "ur_PK:2000";LC_TIME
category  "ur_PK:2000";LC_NUMERIC
category  "ur_PK:2000";LC_MONETARY
category  "ur_PK:2000";LC_MESSAGES
category  "ur_PK:2000";LC_PAPER
category  "ur_PK:2000";LC_NAME
category  "ur_PK:2000";LC_ADDRESS
category  "ur_PK:2000";LC_TELEPHONE

END LC_IDENTIFICATION

LC_CTYPE
copy "i18n"
translit_start
include "translit_combining";""

% those two lettes are not in cp1256...

% Maddah above -> Alef with madda above
<U0653> "<U0622>"
% Farsi yeh -> yeh
<U06CC> "<U064A>"

translit_end
END LC_CTYPE

LC_COLLATE
copy "en_DK"
END LC_COLLATE

LC_MONETARY
%it is meant to be Pak RS, could you see if it is correct please
int_curr_symbol "<U0050><U004B><U0052><U0020>"
currency_symbol "<U0052><U0073>"
mon_decimal_point "<U002E>"
mon_thousands_sep "<U002C>"
mon_grouping  3;3
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       0
p_sign_posn 2
n_sign_posn 1
END LC_MONETARY

LC_NUMERIC
decimal_point "<U002E>"
thousands_sep "<U002C>"
grouping 3;3
END LC_NUMERIC

% Since their is no abbreviated version of the days in urdu I have used the
% full names of the days
% Using only the first letters of the day would have caused a conflict here
% as both "Jumairat(Thurs)" and "Juma(Friday)" have the same starting letter
% Jeem <U062C>
LC_TIME

abday   "<U0627><U062A><U0648><U0627><U0631>";/
	"<U067E><U064A><U0631>";/
	"<U0645><U0646><U06AF><U0644>";/
	"<U0628><U062F><U06BE>";/
	"<U062C><U0645><U0639><U0631><U0627><U062A>";/
	"<U062C><U0645><U0639><U0647>";/
	"<U0647><U0641><U062A><U0647>"
day	"<U0627><U062A><U0648><U0627><U0631>";/
	"<U067E><U064A><U0631>";/
	"<U0645><U0646><U06AF><U0644>";/
	"<U0628><U062F><U06BE>";/
	"<U062C><U0645><U0639><U0631><U0627><U062A>";/
	"<U062C><U0645><U0639><U0647>";/
	"<U0647><U0641><U062A><U0647>"
abmon	"<U062C><U0646><U0648><U0631><U064A>";/
	"<U0641><U0631><U0648><U0631><U064A>";/
	"<U0645><U0627><U0631><U0686>";/
	"<U0627><U067E><U0631><U064A><U0644>";/
	"<U0645><U0653><U06CC>";/
	"<U062C><U0648><U0646>";/
	"<U062C><U0648><U0644><U0627><U064A>";/
	"<U0627><U06AF><U0633><U062A>";/
	"<U0633><U062A><U0645><U0628><U0631>";/
	"<U0627><U0643><U062A><U0648><U0628><U0631>";/
	"<U0646><U0648><U0645><U0628><U0631>";/
	"<U062F><U0633><U0645><U0628><U0631>"
mon	"<U062C><U0646><U0648><U0631><U064A>";/
	"<U0641><U0631><U0648><U0631><U064A>";/
	"<U0645><U0627><U0631><U0686>";/
	"<U0627><U067E><U0631><U064A><U0644>";/
	"<U0645><U0653><U06CC>";/
	"<U062C><U0648><U0646>";/
	"<U062C><U0648><U0644><U0627><U064A>";/
	"<U0627><U06AF><U0633><U062A>";/
	"<U0633><U062A><U0645><U0628><U0631>";/
	"<U0627><U0643><U062A><U0648><U0628><U0631>";/
	"<U0646><U0648><U0645><U0628><U0631>";/
	"<U062F><U0633><U0645><U0628><U0631>"

% Date Time Format
d_t_fmt "<U0648><U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020><U0025><U005A><U0020><U062A><U0020><U0025><U0064><U0020><U0025><U0042><U0020><U0025><U0059>"

% date Format. I have put this in reverse order to try to get the date
% in R->L order
d_fmt "<U0025><U0064><U002F><U0025><U006D><U002F><U0025><U0059>"

% time format
t_fmt "<U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053>"

%<U0635> stands for <U0635><U0628><U062D>
%<U0634> stands for <U0634><U0627><U0645>
am_pm "<U0635>";"<U0634>"

%time format in 12 hour clock
t_fmt_ampm "<U0025><U0050><U0020><U0025><U0049><U003A><U0025><U004D><U003A><U0025><U0053>"

% display columns right to left ?
cal_direction	3
END LC_TIME

LC_MESSAGES

% locale based messages
% Can we put in the values for a cancel exression here?? I found a term that
% would define cancel appropriately
% <U0647> = <U0647><U0627><U06BA> , the last tag is for noon-ghunna!
% <U0628> = <U0628><U0644><U0643><U0644>
% again <U0066> and <U006F> are place holders
% <U0646> = <U0646><U0647><U064A><U06BA>
yesstr	"<U0628><U0644><U0643><U0644>"
nostr	"<U0646><U0647><U064A><U06BA>"
yesexpr	"<U005B><U0079><U0059><U0647><U0628><U0066><U005D><U002E><U002A>"
noexpr	"<U005B><U006E><U004E><U0646><U006F><U005D><U002E><U002A>"

END LC_MESSAGES

%Draft Finished: 17:00 09/07/2000

LC_PAPER
height      297
width       210
END LC_PAPER

LC_MEASUREMENT
measurement 1
END LC_MEASUREMENT

LC_NAME
% FIXME
copy "en_DK"
END LC_NAME

LC_ADDRESS
% FIXME
copy "en_DK"
END LC_ADDRESS

LC_TELEPHONE
% FIXME
copy "en_DK"
END LC_TELEPHONE
