#!/usr/bin/perl
# This script configures the locale environment.
# Applies only to woody release.

use strict;
use warnings;

# We use some helper subroutines so we have to include
# their definitions
require '/usr/lib/localization-config/common/editconfig.pl';
require '/usr/lib/localization-config/common/log.pl';

# If no locale is given as argument, quit
my $lang = $ARGV[0] or log_die("$0: No language given");

# The configuration files
my $localegen   = "/etc/locale.gen";
my $environment = "/etc/environment";

#these are glibc settings -> see /usr/share/i18n/SUPPORTED
my %lang_map = (
        #entries sorted alphabetically
        'ca_ES@euro'  => { LANG      => 'ca_ES@euro',
                           LANGUAGE  => 'ca_ES@euro:ca_ES:ca:es_ES@euro:es_ES:es:en_GB:en',
                           LOCALEGEN => 'ca_ES@euro ISO-8859-15',
                         },
        'da_DK'       => { LANG      => 'da_DK',
                           LANGUAGE  => 'da_DK:en_GB:en',
                           LOCALEGEN => 'da_DK ISO-8859-1',
                         },
        'de_BE@euro'  => { LANG      => 'de_BE@euro',
                           LANGUAGE  => 'de_BE@euro:de_BE:de:en_GB:en',
                           LOCALEGEN => 'de_BE@euro ISO-8859-15',
                         },
        'de_DE@euro'  => { LANG      => 'de_DE@euro',
                           LANGUAGE  => 'de_DE@euro:de_DE:de:en_GB:en',
                           LOCALEGEN => 'de_DE@euro ISO-8859-15',
                         },
        'el_GR.UTF-8' => { LANG      => 'el_GR.UTF-8',
                           LANGUAGE  => 'el_GR.UTF-8:el_GR:el:en_GB:en',
                           LOCALEGEN => 'el_GR.UTF-8 UTF-8',
                         },
        'en_AU'       => { LANG      => 'en_AU',
                           LANGUAGE  => 'en_AU:en_GB:en',
                           LOCALEGEN => 'en_AU ISO-8859-1',
                         },
        'en_CA'       => { LANG      => 'en_CA',
                           LANGUAGE  => 'en_CA:en_GB:en',
                           LOCALEGEN => 'en_CA ISO-8859-1',
                         },
        'en_IE@euro'  => { LANG      => 'en_IE@euro',
                           LANGUAGE  => 'en_IE:en_GB:en',
                           LOCALEGEN => 'en_IE@euro ISO-8859-15',
                         },
        'en_US'       => { LANG      => 'en_US',
                           LANGUAGE  => 'en_US:en_GB:en',
                           LOCALEGEN => 'en_US ISO-8859-1',
                         },
        'es_AR'       => { LANG      => 'es_AR',
                           LANGUAGE  => 'es_AR:es_AR.UTF-8:es_ES@euro:es_ES:es:en_GB:en_US:en',
                           LOCALEGEN => 'es_AR ISO-8859-1',
                         },
        'es_ES@euro'  => { LANG      => 'es_ES@euro',
                           LANGUAGE  => 'es_ES@euro:es_ES:es:en_GB:en',
                           LOCALEGEN => 'es_ES@euro ISO-8859-15',
                         },
        'es_MX'       => { LANG      => 'es_MX',
                           LANGUAGE  => 'es_MX:es_ES@euro:es:en_US:en',
                           LOCALEGEN => 'es_MX ISO-8859-15',
                         },
        'es_PE'       => { LANG      => 'es_PE',
                           LANGUAGE  => 'es_PE:es_ES@euro:es:en_US:en',
                           LOCALEGEN => 'es_PE ISO-8859-1',
                         },
        'fi_FI@euro'  => { LANG      => 'fi_FI@euro',
                           LANGUAGE  => 'fi_FI@euro:fi_FI:fi:sv_SE:sv:en_GB:en',
                           LOCALEGEN => 'fi_FI@euro ISO-8859-15',
                         },
        'fr_BE@euro'  => { LANG      => 'fr_BE@euro',
                           LANGUAGE  => 'fr_BE@euro:fr_BE:fr:en_GB:en',
                           LOCALEGEN => 'fr_BE@euro ISO-8859-15',
                         },
        'fr_CA'       => { LANG      => 'fr_CA',
                           LANGUAGE  => 'fr_CA:fr_FR:en_CA:en_GB:en',
                           LOCALEGEN => 'fr_CA ISO-8859-1',
                         },
        'fr_FR@euro'  => { LANG      => 'fr_FR@euro',
                           LANGUAGE  => 'fr_FR@euro:fr_FR:fr:en_GB:en',
                           LOCALEGEN => 'fr_FR@euro ISO-8859-15',
                         },
        'it_IT@euro'  => { LANG      => 'it_IT@euro',
                           LANGUAGE  => 'it_IT@euro:it_IT',
                           LOCALEGEN => 'it_IT@euro ISO-8859-15',
                         },
        'ja_JP'       => { LANG      => 'ja_JP.EUC-JP',
                           LANGUAGE  => '',
                           LOCALEGEN => 'ja_JP.EUC-JP EUC-JP',
                         },
        'lv_LV'       => { LANG      => 'lv_LV',
                           LANGUAGE  => 'lv:ru:en',
                           LOCALEGEN => 'lv_LV ISO-8859-13',
                         },
        'ko_KR'       => { LANG      => 'ko_KR.UTF-8',
                           LANGUAGE  => '',
                           LOCALEGEN => 'ko_KR UTF-8',
                         },
        'nb_NO'       => { LANG      => 'no_NO',
                           LANGUAGE  => 'nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en_GB:en',
                           LOCALEGEN => 'no_NO ISO-8859-1',
                        },
#        'nds_DE'     => { LANG      => 'nds_DE',
#                          LANGUAGE  => 'nds_DE;nds;de_DE;de:en_GB:en',
#                          LOCALEGEN => 'nds_DE ISO-8859-15',
#                        }, 
        'nl_BE@euro'  => { LANG      => 'nl_BE@euro',
                           LANGUAGE  => 'nl_BE@euro:nl_BE:nl:en_GB:en',
                           LOCALEGEN => 'NL_BE@euro ISO-8859-15',
                         },
        'nl_NL@euro'  => { LANG      => 'nl_NL@euro',
                           LANGUAGE  => 'nl_NL@euro:nl_NL:nl:en_GB:en',
                           LOCALEGEN => 'nl_NL@euro ISO-8859-15',
                         },
        'nn_NO'       => { LANG      => 'nn_NO',
                           LANGUAGE  => 'nn_NO:nn:no_NO:no:nb_NO:nb:da:sv:en_GB:en',
                           LOCALEGEN => 'nn_NO ISO-8859-1',
                         },
        'no_NO'       => { LANG      => 'no_NO', # nb_NO and no_NO is the same
                           LANGUAGE  => 'nb_NO:nb:no_NO:no:nn_NO:nn:da:sv:en_GB:en',
                           LOCALEGEN => 'no_NO ISO-8859-1',
                         },
        'pl_PL'       => { LANG      => 'pl_PL',
                           LANGUAGE  => 'pl_PL:en_GB:en',
                           LOCALEGEN => 'pl_PL ISO-8859-2',
                         },
        'pt_BR'       => { LANG      => 'pt_BR',
                           LANGUAGE  => 'pt_BR:pt:en',
                           LOCALEGEN => 'pt_BR ISO-8859-1',
                         },
        'se_NO'       => { LANG      => 'se_NO',
                           LANGUAGE  => 'se_NO:se:nb_NO:nb:no_NO:no:nn_NO:nn:en_GB:en',
                           LOCALEGEN => 'se_NO UTF-8',
                         },
        'sv_SE'       => { LANG      => 'sv_SE',
                           LANGUAGE  => 'sv_SE:sv:en_GB:en',
                           LOCALEGEN => 'sv_SE ISO-8859-1',
                         },
        'tr_TR'       => { LANG      => 'tr_TR',
                           LANGUAGE  => 'tr_TR:en_GB:en',
                           LOCALEGEN => 'tr_TR ISO-8859-9',
                         },
             );


# Print the supported locale entries.
if ("supported" eq $lang) {
    for $lang (sort keys %lang_map) {
        print "$lang\n";
    }
    exit 0;
}

if(defined(my $conf = $lang_map{$lang})) {

    if (AppendIfMissingLine($localegen, $conf->{'LOCALEGEN'})) {
        system("/usr/sbin/locale-gen >/dev/null 2>&1");
    }

    for my $variable ("LANG", "LANGUAGE") {
        UpdateOrAppendVariable($environment, $variable, $conf->{$variable}, "=");
    }

} else {
    log_msg("$0: No support for language $lang");
}
