#!/usr/bin/env perl use warnings; use strict; use Locale::Codes::Language 'code2language'; use Locale::Codes::Country 'code2country'; # list of supported locales (at least on Debian-based systems) open my $fh, '<', '/usr/share/i18n/SUPPORTED' or die $!; chomp( my @locales = grep {/\S/ && !/^\s*#/} <$fh> ); close $fh; # just a test of getting installed locales chomp( my @installed_locales = `locale -a` ); push @locales, @installed_locales; my %locales; for (@locales) { my ($lang,$terr) = /^([a-z]+)(?:_([a-z]+))?\b/i; $terr = code2country($terr) ||"unknown"; $lang = code2language($lang)||"unknown"; push @{ $locales{$terr}{$lang} }, $_; } for my $terr (sort keys %locales) { print "$terr\n"; for my $lang (sort keys %{ $locales{$terr} }) { print "\t$lang: ", join(" / ",@{ $locales{$terr}{$lang} }), "\n"; } }