[ILUG] [TOTD] querying the locale database
Conor Daly
conor.daly at oceanfree.net
Fri Oct 1 01:26:01 IST 2004
On Thu, Sep 30, 2004 at 12:50:59PM +0100 or so it is rumoured hereabouts,
P at draigBrady.com thought:
> There is a very useful database of "country" specific
> information, located on all linux systems.
>
> I have found it difficult to interact with this
> locale database though. In the above example
> how does one know how to specify the record (fr_FR)
> or to select the field (int_prefix). so...
Thanks Padraig!
I've scripted that up just for fun. Here it is. Call it what you wish,
I've called it 'loc'
Conor
################ start here ###################
#!/bin/bash
#################################################################
#
# Name loc
# Author Conor Daly
# Date 01-Oct-2004
# License GPL
#
#################################################################
useage() {
cat << USE
Useage: $0 <country> [<field>] | <country_code> [<field>] | country
$0 -? [<lc_type>] | -h
Display locale information for the designated country.
In the first format, '`basename $0`' displays information from the
locale database for the specified country, country_code or lists
the countries in the database. All arguments are used as regexps.
The first argument to the command is interpreted as follows:
The word "country" causes the listing of countries.
An underscore '_' in the word is interpreted as a country_code
Otherwise it is interpreted as a country name.
In the second format, the available lc_types are displayed or, if
a particular lc_type is specified, the fields for that lc_type are
displayed.
Options:
-? Display the possible lc_types or fields
-h Display this help message
USE
}
fields() { # Display lc_types or fields
for LOC in `locale | cut -d= -f1`; do
if [ $TWO ]; then # Fields
echo $LOC | grep -i $TWO >/dev/null
if [ $? -eq 0 ]; then
locale -kc $LOC | cut -d= -f1
fi
else # lc_types
echo $LOC
fi
done
}
country() { # Query database
local GOTONE=0
local COUNTRYASKED=$1
# check for a country_code or name
echo $ONE | grep _ >/dev/null
if [ $? -eq 0 ]; then # country_code
for lang in `locale -a | grep _ | grep -Ev [.@] | grep -i $ONE`; do
# for each matching country_code
if [ $2 ]; then
# display fields
TWO=
echo
echo -n `LANG=$lang locale territory`": $lang: "
LANG=$lang locale title
for LC in `fields`; do
TWO=$LC
for FIELD in `fields | grep $2`; do
echo -n "$lang $FIELD: "; LANG=$lang locale $FIELD
done
done
else
# Just say which country this code applies to
echo -n "$lang "`LANG=$lang locale territory`": "
LANG=$lang locale title
fi
done
GOTONE=1
else # country name
for lang in `locale -a | grep _ | grep -Ev [.@]`; do
# for each matching country_code
COUNTRY=`LANG=$lang locale territory`
echo $COUNTRY | grep -i "$COUNTRYASKED" >/dev/null
if [ $? -eq 0 ]; then
if [ $2 ]; then
# display fields
TWO=
echo
echo -n `LANG=$lang locale territory`": $lang: "
LANG=$lang locale title
for LC in `fields`; do
TWO=$LC
for FIELD in `fields | grep $2`; do
echo -n "$lang $FIELD: "; LANG=$lang locale $FIELD
done
done
else
# Just say which country this code applies to
echo -n "$lang "`LANG=$lang locale territory`": "
LANG=$lang locale title
fi
GOTONE=1
fi
done
fi
if [ $GOTONE -eq 0 ] && [ $# -eq 1 ]; then
# Neither country name or code, assume default country
for LC in `fields`; do
# display fields
TWO=$LC
for FIELD in `fields | grep $ONE`; do
echo -n `locale | grep LANG | cut -d= -f2 | cut -d. -f1`" $FIELD: "; locale $FIELD
done
done
fi
}
countries() { # List available countries
locale -a | grep _ | grep -Ev '[.@]' | while read lang; do LANG=$lang locale territory; done | sort | uniq | less -eF
}
if [ $# -lt 1 ] || [ "$1" == "-h" ]; then
useage
exit 1
fi
if [ $# -gt 0 ]; then
ONE=$1
fi
if [ "$1" == "-?" ]; then
if [ $# -gt 1 ]; then
TWO=$2
fi
fields
exit 0
fi
if [ "$1" == "country" ]; then
countries
exit 0
fi
if [ $# -lt 3 ]; then
country $*
exit 0
fi
################ end here ###################
--
Conor Daly <conor.daly at oceanfree.net>
Domestic Sysadmin :-)
---------------------
Faenor.cod.ie
1:31am up 34 days, 5:24, 0 users, load average: 0.02, 0.01, 0.00
Hobbiton.cod.ie
01:23:12 up 13 days, 2:54, 1 user, load average: 0.00, 0.00, 0.00
More information about the ILUG
mailing list