This is the mail archive of the libc-alpha@sources.redhat.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Ukrainian locale


Hello

Did you get this email?
Sorry, I miss it.

I've noticed your glibc problem reports
(libc/5018 libc/5019 libc/5028) and would like to assist you in
getting the changes accepted into glibc.
Fine, but I am change my employer and _very_ busy now, sorry.

Please talk with Leon Kanter (<leon@blackcatlinux.com>) or with
Valentyn Solomko (<vesna@sammit.kiev.ua>) about new Ukrainian locale.

I'm currently looking at your suggested changes to the uk_UA locale.
I copy this mail to the address of the previous submitter of the
locale.

It is very hard for the glibc maintainers to check that your suggested
changes are correct, because of lack of knowledge regarding this
language, and you did not supply any references (standards, official
documents using the format, etc) specifying the correct content of the
locale.  Please supply some references verifying that your changes are
correct.
I put all what I knew into locale file.
I has not free time now to find required information, sorry.

Did you try to contact the author of the initial locale?  Does he
agree with your changes?
No. He has bad knowledge of Ukrainian alphabet. He is not a member of UALUG.


It would be better if your proposed locale was easier to compare to
the original locale.  This mean it would be better if the new locale
used the same section order, to make it easier to look at the diff
between the locales.
You can use output of `locale -ck SECTION_NAME` before and after instalation
of new Ukrainian locale. Sorry, but I write new locale from scratch.


(I asked for more information using gnats, but got no reply there.
Because of this, I try again.)
Thanks. How I can operate with gnats (update PR's, at example)?

The gnats reports:
<URL:http://bugs.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=glibc&pr=5018>
<URL:http://bugs.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=glibc&pr=5019>

And libc/5028 :) (why database name - glibc, but PR id - glibc/NNNN ?).


Latest version of Ukrainian locale with two scripts to verify it correctnes in atachment.

Few addtional comments about locale:

I write it with ISO/IEC 14652:2002(E) in hands and found few viloations of this standard in glibc 2.2.5 and 2.3.2.

 - week directive does not work properly;
 - %n and %l escape sequence not supported in postal_fmt;


Sections:


LC_CTYPE
transliteration - I use official transliteration system but implementation is not complete and I don't know how I can verify it.


LC_COLLATE

I use alphabet from "Ukrainian orthography", Kyiv, 1991.
I am sure about collation order of apostrophe.
I am sure about collation order of soft sign for pre 1991-alphabets.
I am sure about why positon of soft sign was changed.
I am sure about order collation order of capital and small letters.
I am not sure about collation order of foreign letters (ask Valentyn Solomko instead).


LC_MONETARY

I am sure about number format (I use "Typesetting rules" as source).
I am sure about format with local currency symbol.
I am not sure about format with foreign currency symbol, I can't find source printed before digital epoch.
I don't know how to implement exception for numbers with four digits.


LC_NUMERIC

Same as LC_MONETARY.

LC_TIME

I am sure about names and abbreviations of Ukrainian months.
I am sure about case of weekday and month names (explicit rule in
Ukrainian orthography - always in lower case, except when they at begin
of sentence, part of name of historical date (Chorna Piatnycia) or holiday (Verbna
Nedilia), or part of name of the people (Volodymyr Sereda, Mykola Veresen`).


I am sure about full date format (piatnycia, 1-e chervnia 2003-ho roku), sort date format (01.06.03 - official date format defined in DSTU).
I am not sure about long date format (pt, 01-cher-2003) - I never see it.


I am sure about time formar, but we use only 24-hours format for digital representation of time, so I am not sure about AM/PM suffixes.

I am sure about timezone represenation - we use only digital format and newer use foreign abbreviations.

  I am not sure about summertime reprezentation.
  I don't know how verify "timezone" parameter and how use it.

  I am not sure about minimal days in week to include it into new year
(1th and 2ht January are holidays, so, if year begins in Thuesday, this week
contains no working days).

I am sure about cal_direction, but nobody supports it.

LC_MESSAGES

Hard problem with Ukrainian keyboard layout. :(

LC_PAPER

We use A4 format only.

LC_TELEPHONE

  I am sure about phone format.
  I am not sure about prefix for foreign calls - I never use it.

LC_NAME

  I am not sure about name_fmt (see examples, maybe I am wrong?).
  I am sure about salutations.


LC_ADDRESS


We use European format for postal addresses from 1996 year (maybe I can just copy format used in France or Germany?).

I am not sure about country_name and lang_name (in what language I must write it?).

I am sure about country_car (I see this code everyday).
I am not sure about country_isbn (I just see this code in new books printed in Ukraine).


Few fields renamed in ISO/IEC 14652:2002.


-- Best regards, mailto:lvm@mystery.lviv.net Volodymyr M. Lisivka ICQ#14549856
#!/bin/bash

if [ "foo$1" = "foo" ]
then
  LOCALE_FILE='./uk_UA'
else
  if [ "foo$1" = "foo-h" ]
  then
    echo "Usage: $0 [-h|FILENAME]"
    echo "  -h         this help message"
    echo "  FILENAME   file with Ukrainian locale"
    echo
    exit 0
  else
    LOCALE_FILE="$1"
  fi
fi

if [ -f "$LOCALE_FILE" ]
then
  for I in KOI8-U CP1251 UTF-8 
  do
    localedef -c -i ./uk_UA -f $I uk_UA.$I
  done
else
  echo "Can't find file \"$LOCALE_FILE\" with description of Ukrainian locale."
  exit 1
fi

Attachment: uk_UA-2.0
Description: Text document

#!/bin/sh


VERSION="localeconf-0.3"
OUTPUT_MODE=color


for I in $@
do
case "$I" in
-h|--help)
	echo "Usage: $0 [OPTIONS]"
	echo "Options:"
	echo "  -h, --help      this help screen"
	echo "  -V, --version   version of this script"
	echo "  -c, --no-color  without colored output"
	echo "  -v, --verbose   verbose output"
	echo ""
	exit 0;
      ;;
-V|--version)
	echo "$VERSION"
	exit 0;
      ;;
-c|--no-color)
        OUTPUT_MODE=plain
      ;;
-v|--verbose)
        VERBOSE=yes
      ;;
*)
        echo "Unknown option: $I"
	exit 1
      ;;
esac
done

RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"

return_success() {
  STATUS=OK
}
return_failure() {
  STATUS=FAILURE
}

echo_success() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "[  "
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"OK"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 0
}

echo_done() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "[  "
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"DONE"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 0
}

echo_failure() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_FAILURE
  echo -n $"FAILED"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return_failure
  return 1
}

echo_passed() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"PASSED"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 1
}

echo_warning() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"WARNING"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return_failure
  return 1
}

echo_skipped() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"SKIPPED"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 1
}

echo_todo() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"TODO"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return_failure
  return 1
}


return_success

LANGUAGE_ALPHABET='Ð?аÐ?бÐ?вÐ?гÒ?Ò?Ð?дÐ?еÐ?Ñ?Ð?жÐ?зÐ?иÐ?Ñ?Ð?Ñ?Ð?йÐ?кÐ?лÐ?мÐ?нÐ?оÐ?пÐ?Ñ?СÑ?ТÑ?УÑ?ФÑ?Ð¥Ñ?ЦÑ?ЧÑ?ШÑ?ЩÑ?ЬÑ?ЮÑ?ЯÑ?'
LANGUAGE_DAYS="понедÑ?лок вÑ?вÑ?оÑ?ок Ñ?еÑ?еда Ñ?еÑ?веÑ? п'Ñ?Ñ?ниÑ?Ñ? Ñ?Ñ?боÑ?а недÑ?лÑ?"
LANGUAGE_DAYS_ABBR="пн вÑ? Ñ?Ñ? Ñ?Ñ? пÑ? Ñ?б нд"
LANGUAGE_MONTHS="Ñ?Ñ?Ñ?енÑ? лÑ?Ñ?ий беÑ?езенÑ? квÑ?Ñ?енÑ? Ñ?Ñ?авенÑ? Ñ?еÑ?венÑ? липенÑ? Ñ?еÑ?пенÑ? веÑ?еÑ?енÑ? жовÑ?енÑ? лиÑ?Ñ?опад гÑ?Ñ?денÑ?"
LANGUAGE_MONTHS_ABBR="Ñ?Ñ?Ñ? лÑ?Ñ? беÑ? квÑ? Ñ?Ñ?а Ñ?еÑ? лип Ñ?еÑ? веÑ? жов лиÑ? гÑ?Ñ?"

LANGUAGE_TEST_DATETIME="2 may 2003 01:05:04"
LANGUAGE_TEST_DATETIME_FULL_FORMAT="п'Ñ?Ñ?ниÑ?Ñ?, 2 Ñ?Ñ?авнÑ? 2003 01:05:04 `date +%z`"
LANGUAGE_TEST_DATETIME_LONG_FORMAT="пÑ?, 02-Ñ?Ñ?а-2003 01:05:04 `date +%z`"
LANGUAGE_TEST_DATE_SHORT_FORMAT="02.05.03"

LANGUAGE_SORTING_EXAMPLE=`cat <<SORTING_EXAMPLE
аналÑ?гÑ?н
аналогÑ?Ñ?нÑ?Ñ?Ñ?Ñ?
бджÑ?лÑ?ниÑ?Ñ?во
бджÑ?лонÑ?ка
безвиннÑ?Ñ?Ñ?Ñ?
безвÑ?лÑ?нÑ?Ñ?Ñ?Ñ?
безгÑ?Ñ?нÑ?Ñ?Ñ?Ñ?
безÒ?Ñ?Ñ?нÑ?овнÑ?Ñ?Ñ?Ñ?
пÑ?Ñ?е
п'Ñ?Ñ?и
SORTING_EXAMPLE
`

LANGUAGE_NAME=Ukrainian
LANGUAGE_CODE=uk
LANGUAGE_COUNTRY=UA
LANGUAGE_ENCODING=UTF-8
LANGUAGE_ENCODING_LC=`echo "$LANGUAGE_ENCODING"|tr '[A-Z]' '[a-z]'`
LANGUAGE_ENCODING_LC_COND=`echo "$LANGUAGE_ENCODING_LC"|tr -d ' _.-'`
LANGUAGE_FULL_LOCALE_NAME="${LANGUAGE_CODE}_${LANGUAGE_COUNTRY}.${LANGUAGE_ENCODING}"
LANGUAGE_FONT_ENCODING=iso10646-1
LANGUAGE_X_KEYBOARD=ua
LANGUAGE_CONSOLE_KEYBOARD=ua

if [ "foo$VERBOSE" != "foo" ]
then
echo LANGUAGE_NAME=$LANGUAGE_NAME
echo LANGUAGE_CODE=$LANGUAGE_CODE
echo LANGUAGE_COUNTRY=$LANGUAGE_COUNTRY
echo LANGUAGE_ENCODING=$LANGUAGE_ENCODING
echo LANGUAGE_FULL_LOCALE_NAME=$LANGUAGE_FULL_LOCALE_NAME
echo LANGUAGE_FONT_ENCODING=$LANGUAGE_FONT_ENCODING
echo LANGUAGE_X_KEYBOARD=$LANGUAGE_X_KEYBOARD
echo LANGUAGE_CONSOLE_KEYBOARD=$LANGUAGE_CONSOLE_KEYBOARD
echo LANGUAGE_ALPHABET=$LANGUAGE_ALPHABET

echo LANGUAGE_DAYS=$LANGUAGE_DAYS
echo LANGUAGE_DAYS_ABBR=$LANGUAGE_DAYS_ABBR
echo LANGUAGE_MONTHS=$LANGUAGE_MONTHS
echo LANGUAGE_MONTHS_ABBR=$LANGUAGE_MONTHS_ABBR

echo LANGUAGE_TEST_DATETIME=$LANGUAGE_TEST_DATETIME
echo LANGUAGE_TEST_DATETIME_FULL_FORMAT=$LANGUAGE_TEST_DATETIME_FULL_FORMAT
echo LANGUAGE_TEST_DATE_SHORT_FORMAT=$LANGUAGE_TEST_DATE_SHORT_FORMAT
fi

echo -n "Checking for $LANGUAGE_FULL_LOCALE_NAME locale"

LOCALES=`(locale -a; locale --list-archive  2>/dev/null ) | grep "^${LANGUAGE_CODE}_${LANGUAGE_COUNTRY}.$LANGUAGE_ENCODING_LC_COND\$"|uniq`

if [ "$LOCALES" ]
then
  echo_success
  echo  
else
  echo_failure
  echo  
  echo "Can't find locale $LANGUAGE_FULL_LOCALE_NAME!"
  echo 
  echo "You can recreate them with command:"
  echo "# localedef -c -f $LANGUAGE_ENCODING -i ${LANGUAGE_CODE}_$LANGUAGE_COUNTRY $LANGUAGE_FULL_LOCALE_NAME"
fi


#FIXME: generate temporary file names
ALPHABET_FILE=/tmp/alphabet.$RANDOM.$PPID
SORTED_ALPHABET_FILE=/tmp/sorted-alphabet.$RANDOM.$PPID

echo -n "Checking collation order for $LANGUAGE_NAME alphabet"

echo "$LANGUAGE_ALPHABET"|LC_ALL=$LANGUAGE_FULL_LOCALE_NAME fold -w 1 >$ALPHABET_FILE

tac <$ALPHABET_FILE | LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" sort >$SORTED_ALPHABET_FILE

if cmp -s $ALPHABET_FILE $SORTED_ALPHABET_FILE
then
  echo_success
  echo  
else
  echo_failure
  echo  
  echo "Your system has wrong collation order for $LANGUAGE_NAME alphabet!"
  echo "You must fix Your $LANGUAGE_FULL_LOCALE_NAME locale!"
  echo
  LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" diff -u $ALPHABET_FILE $SORTED_ALPHABET_FILE
fi

echo -n "Checking collation order for $LANGUAGE_NAME letters and specials"
echo "$LANGUAGE_SORTING_EXAMPLE" >$ALPHABET_FILE

tac <$ALPHABET_FILE | LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" sort >$SORTED_ALPHABET_FILE

if cmp -s $ALPHABET_FILE $SORTED_ALPHABET_FILE
then
  echo_success
  echo  
else
  echo_failure
  echo  
  echo "Your system has wrong collation order for $LANGUAGE_NAME letters!"
  echo "You must fix Your $LANGUAGE_FULL_LOCALE_NAME locale!"
  echo  
  LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" diff -u $ALPHABET_FILE $SORTED_ALPHABET_FILE
fi

rm -f $ALPHABET_FILE $SORTED_ALPHABET_FILE

echo -n "Checking day abbreviations for $LANGUAGE_NAME language"

I=0
WRONG_DAYS=""
for DAY in $LANGUAGE_DAYS_ABBR
do
  LOCAL_DAY=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$(($I+5)) may 2003 1:5:4" "+%a"`
  if [ "$DAY" != "$LOCAL_DAY" ]
  then
   WRONG_DAYS="$WRONG_DAYS $LOCAL_DAY (must be $DAY)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_DAYS" ]
then
  echo_failure
  echo
  echo "Wrong day abbreviations:
$WRONG_DAYS"
else
  echo_success
  echo  
fi

echo -n "Checking day names for $LANGUAGE_NAME language"

I=0
WRONG_DAYS=""
for DAY in $LANGUAGE_DAYS
do
  LOCAL_DAY=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$(($I+5)) may 2003 1:5:4" "+%A"`
  if [ "$DAY" != "$LOCAL_DAY" ]
  then
   WRONG_DAYS="$WRONG_DAYS $LOCAL_DAY (must be $DAY)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_DAYS" ]
then
  echo_failure
  echo
  echo "Wrong days:
$WRONG_DAYS"
else
  echo_success
  echo  
fi

echo -n "Checking month abbreviations for $LANGUAGE_NAME language"

I=1
WRONG_MONTHS=""
for MONTH in $LANGUAGE_MONTHS_ABBR
do
  LOCAL_MONTH=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$I/1" "+%b"`
  if [ "$MONTH" != "$LOCAL_MONTH" ]
  then
   WRONG_MONTHS="$WRONG_MONTHS $LOCAL_MONTH (must be $MONTH)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_MONTHS" ]
then
  echo_failure
  echo
  echo "Wrong month abbreviations:
$WRONG_MONTHS"
else
  echo_success
  echo  
fi

echo -n "Checking month names for $LANGUAGE_NAME language"

I=1
WRONG_MONTHS=""
for MONTH in $LANGUAGE_MONTHS
do
  LOCAL_MONTH=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$I/1" "+%B"`
  if [ "$MONTH" != "$LOCAL_MONTH" ]
  then
   WRONG_MONTHS="$WRONG_MONTHS $LOCAL_MONTH (must be $MONTH)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_MONTHS" ]
then
  echo_failure
  echo
  echo "Wrong months:
$WRONG_MONTHS"
else
  echo_success
  echo  
fi

echo -n "Checking full date format for $LANGUAGE_NAME language"

LOCAL_DATE_FORMAT=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$LANGUAGE_TEST_DATETIME"`

if [ "$LOCAL_DATE_FORMAT" != "$LANGUAGE_TEST_DATETIME_FULL_FORMAT" ]
then
  echo_failure
  echo
  echo "Wrong full date format:"
  echo "\"$LOCAL_DATE_FORMAT\" (must be \"$LANGUAGE_TEST_DATETIME_FULL_FORMAT\")"
else
  echo_success
  echo  
fi

echo -n "Checking long date format for $LANGUAGE_NAME language"

LOCAL_DATE_FORMAT=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$LANGUAGE_TEST_DATETIME" "+%c"`

if [ "$LOCAL_DATE_FORMAT" != "$LANGUAGE_TEST_DATETIME_LONG_FORMAT" ]
then
  echo_failure
  echo
  echo "Wrong long date format:"
  echo "\"$LOCAL_DATE_FORMAT\" (must be \"$LANGUAGE_TEST_DATETIME_LONG_FORMAT\")"
else
  echo_success
  echo  
fi

echo -n "Checking short date format for $LANGUAGE_NAME language"

LOCAL_DATE_FORMAT=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$LANGUAGE_TEST_DATETIME" "+%x"`

if [ "$LOCAL_DATE_FORMAT" != "$LANGUAGE_TEST_DATE_SHORT_FORMAT" ]
then
  echo_failure
  echo
  echo "Wrong short date format:"
  echo "\"$LOCAL_DATE_FORMAT\" (must be \"$LANGUAGE_TEST_DATE_SHORT_FORMAT\")"
else
  echo_success
  echo  
fi
#!/bin/sh


VERSION="localeconf-0.3"
OUTPUT_MODE=color


for I in $@
do
case "$I" in
-h|--help)
	echo "Usage: $0 [OPTIONS]"
	echo "Options:"
	echo "  -h, --help      this help screen"
	echo "  -V, --version   version of this script"
	echo "  -c, --no-color  without colored output"
	echo "  -v, --verbose   verbose output"
	echo ""
	exit 0;
      ;;
-V|--version)
	echo "$VERSION"
	exit 0;
      ;;
-c|--no-color)
        OUTPUT_MODE=plain
      ;;
-v|--verbose)
        VERBOSE=yes
      ;;
*)
        echo "Unknown option: $I"
	exit 1
      ;;
esac
done

RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \\033[0;39m"

return_success() {
  STATUS=OK
}
return_failure() {
  STATUS=FAILURE
}

echo_success() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "[  "
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"OK"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 0
}

echo_done() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "[  "
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_SUCCESS
  echo -n $"DONE"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "  ]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 0
}

echo_failure() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_FAILURE
  echo -n $"FAILED"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return_failure
  return 1
}

echo_passed() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"PASSED"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 1
}

echo_warning() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"WARNING"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return_failure
  return 1
}

echo_skipped() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"SKIPPED"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return 1
}

echo_todo() {
  if [ "$OUTPUT_MODE" = "color" ] ; then $MOVE_TO_COL ; else echo -ne "\t"; fi
  echo -n "["
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_WARNING
  echo -n $"TODO"
  [ "$OUTPUT_MODE" = "color" ] && $SETCOLOR_NORMAL
  echo -n "]"
  if [ "$OUTPUT_MODE" = "color" ] ; then echo -ne "\r" ; else echo ; fi
  return_failure
  return 1
}


return_success

LANGUAGE_ALPHABET='áÁâÂ÷×çǽ­äÄåÅ´¤öÖúÚéɶ¦·§êÊëËìÌíÍîÎïÏðÐòÒóÓôÔõÕæÆèÈãÃþÞûÛýÝøØàÀñÑ'
LANGUAGE_DAYS="ÐÏÎÅĦÌÏË ×¦×ÔÏÒÏË ÓÅÒÅÄÁ ÞÅÔ×ÅÒ Ð'ÑÔÎÉÃÑ ÓÕÂÏÔÁ ÎÅĦÌÑ"
LANGUAGE_DAYS_ABBR="ÐÎ ×Ô ÓÒ ÞÔ ÐÔ ÓÂ ÎÄ"
LANGUAGE_MONTHS="Ó¦ÞÅÎØ ÌÀÔÉÊ ÂÅÒÅÚÅÎØ ËצÔÅÎØ ÔÒÁ×ÅÎØ ÞÅÒ×ÅÎØ ÌÉÐÅÎØ ÓÅÒÐÅÎØ ×ÅÒÅÓÅÎØ ÖÏ×ÔÅÎØ ÌÉÓÔÏÐÁÄ ÇÒÕÄÅÎØ"
LANGUAGE_MONTHS_ABBR="Ó¦Þ ÌÀÔ ÂÅÒ Ëצ ÔÒÁ ÞÅÒ ÌÉÐ ÓÅÒ ×ÅÒ ÖÏ× ÌÉÓ ÇÒÕ"

LANGUAGE_TEST_DATETIME="2 may 2003 01:05:04"
LANGUAGE_TEST_DATETIME_FULL_FORMAT="Ð'ÑÔÎÉÃÑ, 2 ÔÒÁ×ÎÑ 2003 01:05:04 `date +%z`"
LANGUAGE_TEST_DATETIME_LONG_FORMAT="ÐÔ, 02-ÔÒÁ-2003 01:05:04 `date +%z`"
LANGUAGE_TEST_DATE_SHORT_FORMAT="02.05.03"

LANGUAGE_SORTING_EXAMPLE=`cat <<SORTING_EXAMPLE
ÁÎÁÌØÇ¦Î
ÁÎÁÌÏǦÞΦÓÔØ
ÂÄÖ¦ÌØÎÉÃÔ×Ï
ÂÄÖ¦ÌÏÎØËÁ
ÂÅÚ×ÉÎΦÓÔØ
ÂÅÚ×¦ÌØÎ¦ÓÔØ
ÂÅÚÇÕÞΦÓÔØ
ÂÅÚ­ÒÕÎÔÏ×ΦÓÔØ
ÐÀÒÅ
Ð'ÀÞÉ
SORTING_EXAMPLE
`

LANGUAGE_NAME=Ukrainian
LANGUAGE_CODE=uk
LANGUAGE_COUNTRY=UA
LANGUAGE_ENCODING=KOI8-U
LANGUAGE_ENCODING_LC=`echo "$LANGUAGE_ENCODING"|tr '[A-Z]' '[a-z]'`
LANGUAGE_ENCODING_LC_COND=`echo "$LANGUAGE_ENCODING_LC"|tr -d ' _.-'`
LANGUAGE_FULL_LOCALE_NAME="${LANGUAGE_CODE}_${LANGUAGE_COUNTRY}.${LANGUAGE_ENCODING}"
LANGUAGE_FONT_ENCODING=koi8-u
LANGUAGE_X_KEYBOARD=ua
LANGUAGE_CONSOLE_KEYBOARD=ua

if [ "foo$VERBOSE" != "foo" ]
then
echo LANGUAGE_NAME=$LANGUAGE_NAME
echo LANGUAGE_CODE=$LANGUAGE_CODE
echo LANGUAGE_COUNTRY=$LANGUAGE_COUNTRY
echo LANGUAGE_ENCODING=$LANGUAGE_ENCODING
echo LANGUAGE_FULL_LOCALE_NAME=$LANGUAGE_FULL_LOCALE_NAME
echo LANGUAGE_FONT_ENCODING=$LANGUAGE_FONT_ENCODING
echo LANGUAGE_X_KEYBOARD=$LANGUAGE_X_KEYBOARD
echo LANGUAGE_CONSOLE_KEYBOARD=$LANGUAGE_CONSOLE_KEYBOARD
echo LANGUAGE_ALPHABET=$LANGUAGE_ALPHABET

echo LANGUAGE_DAYS=$LANGUAGE_DAYS
echo LANGUAGE_DAYS_ABBR=$LANGUAGE_DAYS_ABBR
echo LANGUAGE_MONTHS=$LANGUAGE_MONTHS
echo LANGUAGE_MONTHS_ABBR=$LANGUAGE_MONTHS_ABBR

echo LANGUAGE_TEST_DATETIME=$LANGUAGE_TEST_DATETIME
echo LANGUAGE_TEST_DATETIME_FULL_FORMAT=$LANGUAGE_TEST_DATETIME_FULL_FORMAT
echo LANGUAGE_TEST_DATE_SHORT_FORMAT=$LANGUAGE_TEST_DATE_SHORT_FORMAT
fi

echo -n "Checking for $LANGUAGE_FULL_LOCALE_NAME locale"

LOCALES=`(locale -a; locale --list-archive  2>/dev/null ) | grep "^${LANGUAGE_CODE}_${LANGUAGE_COUNTRY}.$LANGUAGE_ENCODING_LC_COND\$"|uniq`

if [ "$LOCALES" ]
then
  echo_success
  echo  
else
  echo_failure
  echo  
  echo "Can't find locale $LANGUAGE_FULL_LOCALE_NAME!"
  echo 
  echo "You can recreate them with command:"
  echo "# localedef -c -f $LANGUAGE_ENCODING -i ${LANGUAGE_CODE}_$LANGUAGE_COUNTRY $LANGUAGE_FULL_LOCALE_NAME"
fi


#FIXME: generate temporary file names
ALPHABET_FILE=/tmp/alphabet.$RANDOM.$PPID
SORTED_ALPHABET_FILE=/tmp/sorted-alphabet.$RANDOM.$PPID

echo -n "Checking collation order for $LANGUAGE_NAME alphabet"

echo "$LANGUAGE_ALPHABET"|LC_ALL=$LANGUAGE_FULL_LOCALE_NAME fold -w 1 >$ALPHABET_FILE

tac <$ALPHABET_FILE | LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" sort >$SORTED_ALPHABET_FILE

if cmp -s $ALPHABET_FILE $SORTED_ALPHABET_FILE
then
  echo_success
  echo  
else
  echo_failure
  echo  
  echo "Your system has wrong collation order for $LANGUAGE_NAME alphabet!"
  echo "You must fix Your $LANGUAGE_FULL_LOCALE_NAME locale!"
  echo
  LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" diff -u $ALPHABET_FILE $SORTED_ALPHABET_FILE
fi

echo -n "Checking collation order for $LANGUAGE_NAME letters and specials"
echo "$LANGUAGE_SORTING_EXAMPLE" >$ALPHABET_FILE

tac <$ALPHABET_FILE | LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" sort >$SORTED_ALPHABET_FILE

if cmp -s $ALPHABET_FILE $SORTED_ALPHABET_FILE
then
  echo_success
  echo  
else
  echo_failure
  echo  
  echo "Your system has wrong collation order for $LANGUAGE_NAME letters!"
  echo "You must fix Your $LANGUAGE_FULL_LOCALE_NAME locale!"
  echo  
  LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" diff -u $ALPHABET_FILE $SORTED_ALPHABET_FILE
fi

rm -f $ALPHABET_FILE $SORTED_ALPHABET_FILE

echo -n "Checking day abbreviations for $LANGUAGE_NAME language"

I=0
WRONG_DAYS=""
for DAY in $LANGUAGE_DAYS_ABBR
do
  LOCAL_DAY=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$(($I+5)) may 2003 1:5:4" "+%a"`
  if [ "$DAY" != "$LOCAL_DAY" ]
  then
   WRONG_DAYS="$WRONG_DAYS $LOCAL_DAY (must be $DAY)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_DAYS" ]
then
  echo_failure
  echo
  echo "Wrong day abbreviations:
$WRONG_DAYS"
else
  echo_success
  echo  
fi

echo -n "Checking day names for $LANGUAGE_NAME language"

I=0
WRONG_DAYS=""
for DAY in $LANGUAGE_DAYS
do
  LOCAL_DAY=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$(($I+5)) may 2003 1:5:4" "+%A"`
  if [ "$DAY" != "$LOCAL_DAY" ]
  then
   WRONG_DAYS="$WRONG_DAYS $LOCAL_DAY (must be $DAY)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_DAYS" ]
then
  echo_failure
  echo
  echo "Wrong days:
$WRONG_DAYS"
else
  echo_success
  echo  
fi

echo -n "Checking month abbreviations for $LANGUAGE_NAME language"

I=1
WRONG_MONTHS=""
for MONTH in $LANGUAGE_MONTHS_ABBR
do
  LOCAL_MONTH=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$I/1" "+%b"`
  if [ "$MONTH" != "$LOCAL_MONTH" ]
  then
   WRONG_MONTHS="$WRONG_MONTHS $LOCAL_MONTH (must be $MONTH)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_MONTHS" ]
then
  echo_failure
  echo
  echo "Wrong month abbreviations:
$WRONG_MONTHS"
else
  echo_success
  echo  
fi

echo -n "Checking month names for $LANGUAGE_NAME language"

I=1
WRONG_MONTHS=""
for MONTH in $LANGUAGE_MONTHS
do
  LOCAL_MONTH=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$I/1" "+%B"`
  if [ "$MONTH" != "$LOCAL_MONTH" ]
  then
   WRONG_MONTHS="$WRONG_MONTHS $LOCAL_MONTH (must be $MONTH)
"
  fi
  I=$(($I+1))
done
if [ "$WRONG_MONTHS" ]
then
  echo_failure
  echo
  echo "Wrong months:
$WRONG_MONTHS"
else
  echo_success
  echo  
fi

echo -n "Checking full date format for $LANGUAGE_NAME language"

LOCAL_DATE_FORMAT=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$LANGUAGE_TEST_DATETIME"`

if [ "$LOCAL_DATE_FORMAT" != "$LANGUAGE_TEST_DATETIME_FULL_FORMAT" ]
then
  echo_failure
  echo
  echo "Wrong full date format:"
  echo "\"$LOCAL_DATE_FORMAT\" (must be \"$LANGUAGE_TEST_DATETIME_FULL_FORMAT\")"
else
  echo_success
  echo  
fi

echo -n "Checking long date format for $LANGUAGE_NAME language"

LOCAL_DATE_FORMAT=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$LANGUAGE_TEST_DATETIME" "+%c"`

if [ "$LOCAL_DATE_FORMAT" != "$LANGUAGE_TEST_DATETIME_LONG_FORMAT" ]
then
  echo_failure
  echo
  echo "Wrong long date format:"
  echo "\"$LOCAL_DATE_FORMAT\" (must be \"$LANGUAGE_TEST_DATETIME_LONG_FORMAT\")"
else
  echo_success
  echo  
fi

echo -n "Checking short date format for $LANGUAGE_NAME language"

LOCAL_DATE_FORMAT=`LC_ALL="$LANGUAGE_FULL_LOCALE_NAME" date -d "$LANGUAGE_TEST_DATETIME" "+%x"`

if [ "$LOCAL_DATE_FORMAT" != "$LANGUAGE_TEST_DATE_SHORT_FORMAT" ]
then
  echo_failure
  echo
  echo "Wrong short date format:"
  echo "\"$LOCAL_DATE_FORMAT\" (must be \"$LANGUAGE_TEST_DATE_SHORT_FORMAT\")"
else
  echo_success
  echo  
fi

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]