package install_any; use diagnostics; use strict; use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @needToCopy); @ISA = qw(Exporter); %EXPORT_TAGS = ( all => [ qw(getNextStep spawnShell addToBeDone) ], ); @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; #-###################################################################################### #- misc imports #-###################################################################################### use common qw(:common :system :functional :file); use commands; use run_program; use partition_table qw(:types); use partition_table_raw; use devices; use fsedit; use network; use modules; use detect_devices; use fs; use any; use log; #- package that have to be copied for proper installation (just to avoid changing cdrom) #- here XFree86 is copied entirey if not already installed, maybe better to copy only server. @needToCopy = qw( XFree86-8514 XFree86-AGX XFree86-Mach32 XFree86-Mach64 XFree86-Mach8 XFree86-Mono XFree86-P9000 XFree86-S3 XFree86-S3V XFree86-SVGA XFree86-W32 XFree86-I128 XFree86-Sun XFree86-SunMono XFree86-Sun24 XFree86-3DLabs XFree86-FBDev XFree86-server XFree86 dhcpcd pump ppp ypbind rhs-printfilters pnm2ppa samba ncpfs kernel-fb ); #-###################################################################################### #- Media change variables&functions #-###################################################################################### my $postinstall_rpms = ''; my $current_medium = 1; my $asked_medium = 1; my $cdrom = undef; sub useMedium($) { #- before ejecting the first CD, there are some files to copy! #- does nothing if the function has already been called. $_[0] > 1 and $::o->{method} eq 'cdrom' and setup_postinstall_rpms($::o->{prefix}, $::o->{packages}); $asked_medium eq $_[0] or log::l("selecting new medium '$_[0]'"); $asked_medium = $_[0]; } sub changeMedium($$) { my ($method, $medium) = @_; log::l("change to medium $medium for method $method (refused by default)"); 0; } sub relGetFile($) { local $_ = $_[0]; m,^(Mandrake|lnx4win)/, and return $_; /\.img$/ and return "images/$_"; my $dir = m|/| ? "Mandrake/mdkinst" : /^(?:compss|compssList|compssUsers|provides|filelist|depslist.*|hdlist.*|auto_inst.*)$/ ? "Mandrake/base/": "$::o->{packages}[2]{$asked_medium}{rpmsdir}/"; "$dir$_"; } sub askChangeMedium($$) { my ($method, $medium) = @_; my $allow; do { eval { $allow = changeMedium($method, $medium) }; } while ($@); #- really it is not allowed to die in changeMedium!!! or install will cores with rpmlib!!! $allow; } sub errorOpeningFile($) { my ($file) = @_; $file eq 'XXX' and return; #- special case to force closing file after rpmlib transaction. $current_medium eq $asked_medium and log::l("errorOpeningFile $file"), return; #- nothing to do in such case. $::o->{packages}[2]{$asked_medium}{selected} or return; #- not selected means no need for worying about. my $max = 32; #- always refuse after $max tries. if ($::o->{method} eq "cdrom") { cat_("/proc/mounts") =~ m|(/tmp/\S+)\s+/tmp/rhimage| and $cdrom = $1; return unless $cdrom; ejectCdrom($cdrom); while ($max > 0 && askChangeMedium($::o->{method}, $asked_medium)) { $current_medium = $asked_medium; eval { fs::mount($cdrom, "/tmp/rhimage", "iso9660", 'readonly') }; my $getFile = getFile($file); $getFile and return $getFile; $current_medium = 'unknown'; #- don't know what CD is inserted now. ejectCdrom($cdrom); --$max; } } else { while ($max > 0 && askChangeMedium($::o->{method}, $asked_medium)) { $current_medium = $asked_medium; my $getFile = getFile($file); $getFile and return $getFile; $current_medium = 'unknown'; #- don't know what CD image has been copied. --$max; } } #- keep in mind the asked medium has been refused on this way. #- this means it is no more selected. $::o->{packages}[2]{$asked_medium}{selected} = undef; #- on cancel, we can expect the current medium to be undefined too, #- this enable remounting if selecting a package back. $current_medium = 'unknown'; return; } sub getFile { my ($f, $method) = @_; my $rel = relGetFile($f); log::l("getFile $f ($method) relGetFile $rel"); do { if ($method =~ /crypto/i) { require crypto; log::l("crypto::getFile $f"); crypto::getFile($f); } elsif ($::o->{method} eq "ftp") { require ftp; ftp::getFile($rel); } elsif ($::o->{method} eq "http") { require http; http::getFile($rel); } else { #- try to open the file, but examine if it is present in the repository, this allow #- handling changing a media when some of the file on the first CD has been copied #- to other to avoid media change... my $f2 = "$postinstall_rpms/$f"; $f2 = "/tmp/rhimage/$rel" unless -e $f2; log::l("local getFile $f2"); open GETFILE, $f2 and *GETFILE; } } || errorOpeningFile($f); } sub getAndSaveFile { my ($file, $local) = @_; log::l("getAndSaveFile $file $local"); local *F; open F, ">$local" or return; local $/ = \ (16 * 1024); my $f = ref($file) ? $file : getFile($file) or return; local $_; while (<$f>) { syswrite F, $_ } 1; } #-###################################################################################### #- Post installation RPMS from cdrom only, functions #-###################################################################################### sub setup_postinstall_rpms($$) { my ($prefix, $packages) = @_; $postinstall_rpms and return; $postinstall_rpms = "$prefix/usr/postinstall-rpm"; log::l("postinstall rpms directory set to $postinstall_rpms"); commands::mkdir_('-p', $postinstall_rpms); require pkgs; #- compute closure of unselected package that may be copied, #- don't complain if package does not exists as it may happen #- for the various architecture taken into account (X servers). my %toCopy; foreach (@needToCopy) { my $pkg = pkgs::packageByName($packages, $_); pkgs::selectPackage($packages, $pkg, 0, \%toCopy) if $pkg; } my @toCopy; push @toCopy, map { pkgs::packageByName($packages, $_) } keys %toCopy; #- extract headers of package, this is necessary for getting #- the complete filename of each package. #- copy the package files in the postinstall RPMS directory. #- last arg is default medium '' known as the CD#1. pkgs::extractHeaders($prefix, \@toCopy, $packages->[2]{1}); commands::cp((map { "/tmp/rhimage/" . relGetFile(pkgs::packageFile($_)) } @toCopy), $postinstall_rpms); } sub clean_postinstall_rpms() { $postinstall_rpms and -d $postinstall_rpms and commands::rm('-rf', $postinstall_rpms); } #-###################################################################################### #- Functions #-###################################################################################### sub kernelVersion { my ($o) = @_; local $_ = readlink("$::o->{prefix}/boot/vmlinuz") and return first(/vmlinuz-(.*)/); my $p = pkgs::packageByName($o->{packages}, "kernel") or die "I couldn't find the kernel package!"; pkgs::packageVersion($p) . "-" . pkgs::packageRelease($p); } sub getNextStep { my ($s) = $::o->{steps}{first}; $s = $::o->{steps}{$s}{next} while $::o->{steps}{$s}{done} || !$::o->{steps}{$s}{reachable}; $s; } sub spawnShell { return if $::o->{localInstall} || $::testing; -x "/bin/sh" or die "cannot open shell - /usr/bin/sh doesn't exist"; fork and return; local *F; sysopen F, "/dev/tty2", 2 or die "cannot open /dev/tty2 -- no shell will be provided"; open STDIN, "<&F" or die ''; open STDOUT, ">&F" or die ''; open STDERR, ">&F" or die ''; close F; c::setsid(); ioctl(STDIN, c::TIOCSCTTY(), 0) or warn "could not set new controlling tty: $!"; exec {"/bin/sh"} "-/bin/sh" or log::l("exec of /bin/sh failed: $!"); } sub fsck_option() { my ($o) = @_; my $y = $o->{security} < 3 && $::beginner ? "-y " : ""; substInFile { s/^(\s*fsckoptions="?)(-y )?/$1$y/ } "$o->{prefix}/etc/rc.d/rc.sysinit"; } sub getAvailableSpace { my ($o) = @_; #- make sure of this place to be available for installation, this could help a lot. #- currently doing a very small install use 36Mb of postinstall-rpm, but installing #- these packages may eat up to 90Mb (of course not all the server may be installed!). #- 50mb may be a good choice to avoid almost all problem of insuficient space left... my $minAvailableSize = 50 * sqr(1024); int ((!$::testing && getAvailableSpace_mounted($o->{prefix}) || getAvailableSpace_raw($o->{fstab}) * 512 / 1.07) - $minAvailableSize); } sub getAvailableSpace_mounted { my ($prefix) = @_; my $dir = -d "$prefix/usr" ? "$prefix/usr" : "$prefix"; my (undef, $free) = common::df($dir) or return; log::l("getAvailableSpace_mounted $free"); $free * 1024 || 1; } sub getAvailableSpace_raw { my ($fstab) = @_; do { $_->{mntpoint} eq '/usr' and return $_->{size} } foreach @$fstab; do { $_->{mntpoint} eq '/' and return $_->{size} } foreach @$fstab; if ($::testing) { my $nb = 450; log::l("taking ${nb}MB for testing"); return $nb << 11; } die "missing root partition"; } sub setPackages($) { my ($o) = @_; require pkgs; if (!$o->{packages} || is_empty_hash_ref($o->{packages}[0])) { $o->{packages} = pkgs::psUsingHdlists($o->{prefix}, $o->{method}); push @{$o->{default_packages}}, "nfs-utils-clients" if $o->{method} eq "nfs"; push @{$o->{default_packages}}, "numlock" if $o->{miscellaneous}{numlock}; push @{$o->{default_packages}}, "kernel-secure" if $o->{security} > 3; push @{$o->{default_packages}}, "kernel-smp" if $o->{security} <= 3 && detect_devices::hasSMP(); #- no need for kernel-smp if we have kernel-secure which is smp push @{$o->{default_packages}}, "kernel-pcmcia-cs" if $o->{pcmcia}; push @{$o->{default_packages}}, "apmd" if $o->{pcmcia}; push @{$o->{default_packages}}, "raidtools" if $o->{raid} && !is_empty_array_ref($o->{raid}{raid}); push @{$o->{default_packages}}, "reiserfs-utils" if grep { isReiserfs($_) } @{$o->{fstab}}; push @{$o->{default_packages}}, "cdrecord" if detect_devices::getIDEBurners(); push @{$o->{default_packages}}, "alsa", "alsa-utils" if modules::get_alias("snd-slot-0") =~ /^snd-card-/; pkgs::getDeps($o->{prefix}, $o->{packages}); pkgs::selectPackage($o->{packages}, pkgs::packageByName($o->{packages}, 'basesystem') || die("missing basesystem package"), 1); #- must be done after selecting base packages (to save memory) pkgs::getProvides($o->{packages}); $o->{compss} = pkgs::readCompss($o->{prefix}, $o->{packages}); #- must be done after getProvides $o->{compssListLevels} = pkgs::readCompssList($o->{packages}); ($o->{compssUsers}, $o->{compssUsersSorted}) = pkgs::readCompssUsers($o->{packages}, $o->{compss}); my @l = (); push @l, "kapm", "kcmlaptop", "DrakProfile", "DrakSync" if $o->{pcmcia}; push @l, "Device3Dfx", "XFree86-glide-module" if detect_devices::matching_desc('Voodoo'); push @l, "Glide_V5" if detect_devices::matching_desc('Voodoo 5'); push @l, "Glide_V3-DRI" if detect_devices::matching_desc('Voodoo 3'); require timezone; require lang; push @l, "isdn4k-utils" if ($o->{timezone}{timezone} || timezone::bestTimezone(lang::lang2text($o->{lang}))) =~ /Europe/; $_->{values} = [ map { $_ + 50 } @{$_->{values}} ] foreach grep {$_} map { pkgs::packageByName($o->{packages}, $_) } @l; } else { #- this has to be done to make sure necessary files for urpmi are #- present. pkgs::psUpdateHdlistsDeps($o->{prefix}, $o->{method}); #- remove upgrade flag with selection one. TOCHECK #pkgs::unselectAllPackagesIncludingUpgradable($o->{packages}); } } sub addToBeDone(&$) { my ($f, $step) = @_; return &$f() if $::o->{steps}{$step}{done}; push @{$::o->{steps}{$step}{toBeDone}}, $f; } sub setAuthentication { my ($o) = @_; my ($shadow, $md5, $nis) = @{$o->{authentication} || {}}{qw(shadow md5 NIS)}; my $p = $o->{prefix}; any::enableMD5Shadow($p, $shadow, $md5); any::enableShadow($p) if $shadow; if ($nis) { $o->pkg_install("ypbind"); my $domain = $o->{netc}{NISDOMAIN}; $domain || $nis ne "broadcast" or die _("Can't use broadcast with no NIS domain"); my $t = $domain ? "domain $domain" . ($nis ne "broadcast" && " server") : "ypserver"; substInFile { $_ = "#~$_" unless /^#/; $_ .= "$t $nis\n" if eof; } "$p/etc/yp.conf"; network::write_conf("$p/etc/sysconfig/network", $o->{netc}); } } sub killCardServices { my $pid = chop_(cat_("/tmp/cardmgr.pid")); $pid and kill(15, $pid); #- send SIGTERM } sub hdInstallPath() { cat_("/proc/mounts") =~ m|/\w+/(\S+)\s+/tmp/hdimage| or return; my ($part) = grep { $_->{device} eq $1 } @{$::o->{fstab}}; $part->{mntpoint} or grep { $_->{mntpoint} eq "/mnt/hd" } @{$::o->{fstab}} and return; $part->{mntpoint} ||= "/mnt/hd"; $part->{mntpoint} . first(readlink("/tmp/rhimage") =~ m|^/tmp/hdimage/(.*)|); } sub unlockCdrom(;$) { my ($cdrom) = @_; $cdrom or cat_("/proc/mounts") =~ m|(/tmp/\S+)\s+/tmp/rhimage| and $cdrom = $1; eval { $cdrom and ioctl detect_devices::tryOpen($1), c::CDROM_LOCKDOOR(), 0 }; } sub ejectCdrom(;$) { my ($cdrom) = @_; $cdrom or cat_("/proc/mounts") =~ m|(/tmp/\S+)\s+/tmp/rhimage| and $cdrom = $1; my $f = eval { $cdrom && detect_devices::tryOpen($cdrom) } or return; getFile("XXX"); #- close still opened filehandle eval { fs::umount("/tmp/rhimage") }; ioctl $f, c::CDROMEJECT(), 1; } sub setupFB { my ($o, $vga) = @_; #- install needed packages for frame buffer. $o->pkg_install(qw(kernel-fb XFree86-FBDev)); $vga ||= 785; #- assume at least 640x480x16. require bootloader; #- update bootloader entries with a new fb label. a bit hack unless #- a frame buffer kernel is used, in such case we use it instead #- with the right mode, nothing more to do. foreach (qw(secure smp)) { if (my $e = bootloader::get("/boot/vmlinuz-$_", $o->{bootloader})) { if ($_ eq 'secure') { log::l("warning: kernel-secure is not fb, using a kernel-fb instead"); #- nothing done, fall through linux-fb. } else { $e->{vga} = $vga; goto ok; } } } if (bootloader::add_kernel($o->{prefix}, $o->{bootloader}, kernelVersion($o), 'fb', { label => 'linux-fb', root => bootloader::get("/boot/vmlinuz", $o->{bootloader})->{root}, vga => $vga, })) { $o->{bootloader}{default} = 'linux-fb'; } else { log::l("unable to install kernel with frame buffer support, disabling"); return 0; } ok: bootloader::install($o->{prefix}, $o->{bootloader}, $o->{fstab}, $o->{hds}); 1; } sub install_urpmi { my ($prefix, $method, $mediums) = @_; my @cfg = map_index { my $name = $_->{fakemedium}; local *LIST; open LIST, ">$prefix/var/lib/urpmi/list.$name" or log::l("failed to write list.$name"), return; my $dir = ${{ nfs => "file://mnt/nfs", hd => "file:/" . hdInstallPath(), ftp => $ENV{URLPREFIX}, http => $ENV{URLPREFIX}, cdrom => "removable_cdrom_$::i://mnt/cdrom" }}{$method} . "/$_->{rpmsdir}"; local *FILES; open FILES, "packdrake -c /tmp/$_->{hdlist} | parsehdlist - |"; chop, print LIST "$dir/$_\n" foreach <FILES>; close FILES or log::l("parsehdlist failed"), return; close LIST; $dir .= " with ../base/$_->{hdlist}" if $method =~ /ftp|http/; "$name $dir\n"; } values %$mediums; eval { output "$prefix/etc/urpmi/urpmi.cfg", @cfg }; } #-############################################################################### #- kde stuff #-############################################################################### sub kderc_largedisplay { my ($prefix) = @_; update_userkderc($prefix, 'KDE', Contrast => 7, kfmIconStyle => "Large", kpanelIconStyle => "Normal", #- to change to Large when icons looks better KDEIconStyle => "Large"); substInFile { s/^(GridWidth)=85/$1=100/; s/^(GridHeight)=70/$1=75/; } $_ foreach list_skels($prefix, '.kde/share/config/kfmrc'); } sub kdeicons_postinstall { my ($prefix) = @_; #- parse etc/fstab file to search for dos/win, floppy, zip, cdroms icons. #- handle both supermount and fsdev usage. my %l = ( 'cdrom' => [ 'cdrom', 'Cd-Rom' ], 'zip' => [ 'zip', 'Zip' ], 'floppy-ls' => [ 'floppy', 'LS-120' ], 'floppy' => [ 'floppy', 'Floppy' ], ); foreach (fs::read_fstab("$prefix/etc/fstab")) { my ($name_, $nb) = $_->{mntpoint} =~ m|.*/(\S+?)(\d*)$/|; my ($name, $text) = @{$l{$name_} || []}; my $f = ${{ supermount => sub { $name .= '.fsdev' if $name }, vfat => sub { $name = 'Dos_'; $text = $name_ }, }}{$_->{type}}; &$f if $f; template2userfile($prefix, "$ENV{SHARE_PATH}/$name.kdelnk.in", "Desktop/$text" . ($nb && " $nb"). ".kdelnk", 1, %$_) if $name; } my @l = list_skels($prefix, 'Desktop/Doc.kdelnk'); if (my ($lang) = eval { all("$prefix/usr/doc/mandrake") }) { substInFile { s|^(URL=.*?)/?$|$1/$lang/index.html| } @l; substInFile { s|^(url=/usr/doc/mandrake/)$|$1$lang/index.html| } "$prefix/usr/lib/desktop-links/mandrake.links"; } else { unlink @l; substInFile { $_ = '' if /^\[MDKsupport\]$/ .. /^\s*$/ } "$prefix/usr/lib/desktop-links/mandrake.links"; } # rename the .kdelnk to the name found in the .kdelnk as kde doesn't use it # for displaying foreach my $dir (grep { -d $_ } list_skels($prefix, 'Desktop')) { foreach (grep { /\.kdelnk$/ } all($dir)) { cat_("$dir/$_") =~ /^Name\[\Q$ENV{LANG}\E\]=(.{2,14})$/m and rename "$dir/$_", "$dir/$1.kdelnk"; } } } sub kdemove_desktop_file { my ($prefix) = @_; my @toMove = qw(doc.kdelnk news.kdelnk updates.kdelnk home.kdelnk printer.kdelnk floppy.kdelnk cdrom.kdelnk FLOPPY.kdelnk CDROM.kdelnk); #- remove any existing save in Trash of each user and #- move appropriate file there after an upgrade. foreach my $dir (grep { -d $_ } list_skels($prefix, 'Desktop')) { unlink("$dir/Trash/$_") && rename("$dir/$_", "$dir/Trash/$_") foreach grep { -e "$dir/$_" } @toMove, grep { /\.rpmorig$/ } all($dir) } } #-############################################################################### #- auto_install stuff #-############################################################################### sub auto_inst_file() { ($::g_auto_install ? "/tmp" : "$::o->{prefix}/root") . "/auto_inst.cfg.pl" } sub g_auto_install(;$) { my ($f) = @_; $f ||= auto_inst_file; my $o = {}; $o->{default_packages} = [ map { pkgs::packageName($_) } grep { pkgs::packageFlagSelected($_) && !pkgs::packageFlagBase($_) } values %{$::o->{packages}[0]} ]; my @fields = qw(mntpoint type size); $o->{partitions} = [ map { my %l; @l{@fields} = @$_{@fields}; \%l } grep { $_->{mntpoint} } @{$::o->{fstab}} ]; exists $::o->{$_} and $o->{$_} = $::o->{$_} foreach qw(lang autoSCSI authentication printer mouse wacom netc timezone superuser intf keyboard mkbootdisk users installClass partitioning isUpgrade manualFstab nomouseprobe crypto security modem useSupermount autoExitInstall); #- TODO modules bootloader if (my $card = $::o->{X}{card}) { $o->{X}{$_} = $::o->{X}{$_} foreach qw(default_depth resolution_wanted); if ($o->{X}{default_depth} and my $depth = $card->{depth}{$o->{X}{default_depth}}) { $depth ||= []; $o->{X}{resolution_wanted} ||= join "x", @{$depth->[0]} unless is_empty_array_ref($depth->[0]); $o->{X}{monitor} = $::o->{X}{monitor} if $::o->{X}{monitor}{manual}; } } local $o->{partitioning}{auto_allocate} = 1; local $o->{autoExitInstall} = 1; $_ = { %{$_ || {}} }, delete @$_{qw(oldu oldg password password2)} foreach $o->{superuser}, @{$o->{users} || []}; output($f, "# You should always check the syntax with 'perl -cw auto_inst.cfg.pl' before testing\n", Data::Dumper->Dump([$o], ['$o']), "\0"); } sub loadO { my ($O, $f) = @_; $f ||= auto_inst_file; my $o; if ($f =~ /^(floppy|patch)$/) { my $f = $f eq "floppy" ? "auto_inst.cfg" : "patch"; unless ($::testing) { fs::mount(devices::make("fd0"), "/mnt", (arch() =~ /sparc/ ? "romfs" : "vfat"), 'readonly'); $f = "/mnt/$f"; } -e $f or $f .= '.pl'; my $b = before_leaving { fs::umount("/mnt") unless $::testing; modules::unload($_) foreach qw(vfat fat); }; $o = loadO($O, $f); } else { -e "$f.pl" and $f .= ".pl" unless -e $f; my $fh = -e $f ? do { local *F; open F, $f; *F } : getFile($f) or die _("Error reading file $f"); { local $/ = "\0"; no strict; eval <$fh>; close $fh; $@ and log::l("Bad kickstart file $f (failed $@)"); } add2hash_($o ||= {}, $O); } bless $o, ref $O; } sub generate_ks_cfg { my ($o) = @_; return if $o->{method} =~ /hd|cdrom/; my $ks; if ($o->{method} =~ /ftp|http/) { $ks .= "url --url $ENV{URLPREFIX}\n"; } elsif ($o->{method} =~ /nfs/) { cat_("/proc/mounts") =~ m|(\S+):(\S+)\s+/tmp/rhimage nfs| or die; $ks .= "nfs --server $1 --dir $2\n"; } my %intf = %{$o->{intf}[0]}; if ($intf{BOOTPROTO} =~ /^(dhcp|bootp)$/) { $ks .= "network --bootproto $intf{BOOTPROTO}\n"; } else { my %l = (ip => $intf{IPADDR}, netmask => $intf{NETMASK}, gateway => $o->{netc}{GATEWAY}); $ks .= "network " . join(" ", map_each { $::b && "--$::a $::b" } %l); $ks .= " --nameserver $_" foreach network::dnsServers($o->{netc}); $ks .= "\n"; } $ks; } sub suggest_mount_points { my ($hds, $prefix, $uniq) = @_; my @parts = grep { isTrueFS($_) } fsedit::get_fstab(@$hds); my (%mntpoints, $user); my %l = ( '/' => 'etc/fstab', '/boot' => 'vmlinuz', '/tmp' => '.X11-unix', '/usr' => 'X11R6', '/var' => 'catman', ); foreach my $part (@parts) { $part->{mntpoint} and next; #- if already found via an fstab my $handle = any::inspect($part, $prefix) or return; my $d = $handle->{dir}; my ($mnt) = grep { -e "$d/$l{$_}" } keys %l; $mnt ||= (stat("$d/.bashrc"))[4] ? '/root' : '/home/user' . ++$user if -e "$d/.bashrc"; $mnt ||= (grep { -d $_ && (stat($_))[4] >= 500 && -e "$_/.bashrc" } glob_("$d")) && '/home'; next if $uniq && fsedit::mntpoint2part($mnt, \@parts); $part->{mntpoint} = $mnt; #- try to find other mount points via fstab fs::get_mntpoints_from_fstab(\@parts, $d, $uniq) if $mnt eq '/'; } #- $_->{mntpoint} || fsedit::suggest_part($_, $hds) foreach @parts; $_->{mntpoint} and log::l("suggest_mount_points: $_->{device} -> $_->{mntpoint}") foreach @parts; } #- mainly for finding the root partitions for upgrade sub find_root_parts { my ($hds, $prefix) = @_; log::l("find_root_parts"); suggest_mount_points($hds, $prefix); grep { delete($_->{mntpoint}) eq '/' } fsedit::get_fstab(@$hds); } sub use_root_part { my ($fstab, $part, $prefix) = @_; { my $handle = any::inspect($part, $prefix) or die; fs::get_mntpoints_from_fstab($fstab, $handle->{dir}, 'uniq'); } map { $_->{mntpoint} = 'swap_upgrade' } grep { isSwap($_) } @$fstab; #- use all available swap. fs::mount_all($fstab, $prefix); } sub getHds { my ($o, $f_err) = @_; my $ok = 1; my $flags = $o->{partitioning}; my @drives = detect_devices::hds(); # add2hash_($o->{partitioning}, { readonly => 1 }) if partition_table_raw::typeOfMBR($drives[0]{device}) eq 'system_commander'; getHds: $o->{hds} = catch_cdie { fsedit::hds(\@drives, $flags) } sub { $ok = 0; my $err = $@; $err =~ s/ at (.*?)$//; log::l("error reading partition table: $err"); !$flags->{readonly} && $f_err and $f_err->($err); }; if (is_empty_array_ref($o->{hds}) && $o->{autoSCSI}) { $o->setupSCSI; #- ask for an unautodetected scsi card goto getHds; } $ok = fsedit::verifyHds($o->{hds}, $flags->{readonly}, $ok) unless $flags->{clearall} || $flags->{clear}; $o->{fstab} = [ fsedit::get_fstab(@{$o->{hds}}) ]; fs::check_mounted($o->{fstab}); fs::merge_fstabs($o->{fstab}, $o->{manualFstab}); my @win = grep { isFat($_) && isFat({ type => fsedit::typeOfPart($_->{device}) }) } @{$o->{fstab}}; log::l("win parts: ", join ",", map { $_->{device} } @win) if @win; if (@win == 1) { $win[0]{mntpoint} = "/mnt/windows"; } else { my %w; foreach (@win) { my $v = $w{$_->{device_windobe}}++; $_->{mntpoint} = "/mnt/win_" . lc($_->{device_windobe}) . ($v ? $v+1 : ''); #- lc cuz of StartOffice(!) cf dadou } } my @sunos = grep { isSunOS($_) && type2name($_->{type}) =~ /root/i } @{$o->{fstab}}; #- take only into account root partitions. if (@sunos) { my $v = ''; map { $_->{mntpoint} = "/mnt/sunos" . ($v && ++$v) } @sunos; } #- a good job is to mount SunOS root partition, and to use mount point described here in /etc/vfstab. $ok; } 1; > <a id='n565' href='#n565'>565</a> <a id='n566' href='#n566'>566</a> <a id='n567' href='#n567'>567</a> <a id='n568' href='#n568'>568</a> <a id='n569' href='#n569'>569</a> <a id='n570' href='#n570'>570</a> <a id='n571' href='#n571'>571</a> <a id='n572' href='#n572'>572</a> <a id='n573' href='#n573'>573</a> <a id='n574' href='#n574'>574</a> <a id='n575' href='#n575'>575</a> <a id='n576' href='#n576'>576</a> <a id='n577' href='#n577'>577</a> <a id='n578' href='#n578'>578</a> <a id='n579' href='#n579'>579</a> <a id='n580' href='#n580'>580</a> <a id='n581' href='#n581'>581</a> <a id='n582' href='#n582'>582</a> <a id='n583' href='#n583'>583</a> <a id='n584' href='#n584'>584</a> <a id='n585' href='#n585'>585</a> <a id='n586' href='#n586'>586</a> <a id='n587' href='#n587'>587</a> <a id='n588' href='#n588'>588</a> <a id='n589' href='#n589'>589</a> <a id='n590' href='#n590'>590</a> <a id='n591' href='#n591'>591</a> <a id='n592' href='#n592'>592</a> <a id='n593' href='#n593'>593</a> <a id='n594' href='#n594'>594</a> <a id='n595' href='#n595'>595</a> <a id='n596' href='#n596'>596</a> <a id='n597' href='#n597'>597</a> <a id='n598' href='#n598'>598</a> <a id='n599' href='#n599'>599</a> <a id='n600' href='#n600'>600</a> <a id='n601' href='#n601'>601</a> <a id='n602' href='#n602'>602</a> <a id='n603' href='#n603'>603</a> <a id='n604' href='#n604'>604</a> <a id='n605' href='#n605'>605</a> <a id='n606' href='#n606'>606</a> <a id='n607' href='#n607'>607</a> <a id='n608' href='#n608'>608</a> <a id='n609' href='#n609'>609</a> <a id='n610' href='#n610'>610</a> <a id='n611' href='#n611'>611</a> <a id='n612' href='#n612'>612</a> <a id='n613' href='#n613'>613</a> <a id='n614' href='#n614'>614</a> <a id='n615' href='#n615'>615</a> <a id='n616' href='#n616'>616</a> <a id='n617' href='#n617'>617</a> <a id='n618' href='#n618'>618</a> <a id='n619' href='#n619'>619</a> <a id='n620' href='#n620'>620</a> <a id='n621' href='#n621'>621</a> <a id='n622' href='#n622'>622</a> <a id='n623' href='#n623'>623</a> <a id='n624' href='#n624'>624</a> <a id='n625' href='#n625'>625</a> <a id='n626' href='#n626'>626</a> <a id='n627' href='#n627'>627</a> <a id='n628' href='#n628'>628</a> <a id='n629' href='#n629'>629</a> <a id='n630' href='#n630'>630</a> <a id='n631' href='#n631'>631</a> <a id='n632' href='#n632'>632</a> <a id='n633' href='#n633'>633</a> <a id='n634' href='#n634'>634</a> <a id='n635' href='#n635'>635</a> <a id='n636' href='#n636'>636</a> <a id='n637' href='#n637'>637</a> <a id='n638' href='#n638'>638</a> <a id='n639' href='#n639'>639</a> <a id='n640' href='#n640'>640</a> <a id='n641' href='#n641'>641</a> <a id='n642' href='#n642'>642</a> <a id='n643' href='#n643'>643</a> <a id='n644' href='#n644'>644</a> <a id='n645' href='#n645'>645</a> <a id='n646' href='#n646'>646</a> <a id='n647' href='#n647'>647</a> <a id='n648' href='#n648'>648</a> <a id='n649' href='#n649'>649</a> <a id='n650' href='#n650'>650</a> <a id='n651' href='#n651'>651</a> <a id='n652' href='#n652'>652</a> <a id='n653' href='#n653'>653</a> <a id='n654' href='#n654'>654</a> <a id='n655' href='#n655'>655</a> <a id='n656' href='#n656'>656</a> <a id='n657' href='#n657'>657</a> <a id='n658' href='#n658'>658</a> <a id='n659' href='#n659'>659</a> <a id='n660' href='#n660'>660</a> <a id='n661' href='#n661'>661</a> <a id='n662' href='#n662'>662</a> <a id='n663' href='#n663'>663</a> <a id='n664' href='#n664'>664</a> <a id='n665' href='#n665'>665</a> <a id='n666' href='#n666'>666</a> <a id='n667' href='#n667'>667</a> <a id='n668' href='#n668'>668</a> <a id='n669' href='#n669'>669</a> <a id='n670' href='#n670'>670</a> <a id='n671' href='#n671'>671</a> <a id='n672' href='#n672'>672</a> <a id='n673' href='#n673'>673</a> <a id='n674' href='#n674'>674</a> <a id='n675' href='#n675'>675</a> <a id='n676' href='#n676'>676</a> <a id='n677' href='#n677'>677</a> <a id='n678' href='#n678'>678</a> <a id='n679' href='#n679'>679</a> <a id='n680' href='#n680'>680</a> <a id='n681' href='#n681'>681</a> <a id='n682' href='#n682'>682</a> <a id='n683' href='#n683'>683</a> <a id='n684' href='#n684'>684</a> <a id='n685' href='#n685'>685</a> <a id='n686' href='#n686'>686</a> <a id='n687' href='#n687'>687</a> <a id='n688' href='#n688'>688</a> <a id='n689' href='#n689'>689</a> <a id='n690' href='#n690'>690</a> <a id='n691' href='#n691'>691</a> <a id='n692' href='#n692'>692</a> <a id='n693' href='#n693'>693</a> <a id='n694' href='#n694'>694</a> <a id='n695' href='#n695'>695</a> <a id='n696' href='#n696'>696</a> <a id='n697' href='#n697'>697</a> <a id='n698' href='#n698'>698</a> <a id='n699' href='#n699'>699</a> <a id='n700' href='#n700'>700</a> <a id='n701' href='#n701'>701</a> <a id='n702' href='#n702'>702</a> <a id='n703' href='#n703'>703</a> <a id='n704' href='#n704'>704</a> <a id='n705' href='#n705'>705</a> <a id='n706' href='#n706'>706</a> <a id='n707' href='#n707'>707</a> <a id='n708' href='#n708'>708</a> <a id='n709' href='#n709'>709</a> <a id='n710' href='#n710'>710</a> <a id='n711' href='#n711'>711</a> <a id='n712' href='#n712'>712</a> <a id='n713' href='#n713'>713</a> <a id='n714' href='#n714'>714</a> <a id='n715' href='#n715'>715</a> <a id='n716' href='#n716'>716</a> <a id='n717' href='#n717'>717</a> <a id='n718' href='#n718'>718</a> <a id='n719' href='#n719'>719</a> <a id='n720' href='#n720'>720</a> <a id='n721' href='#n721'>721</a> <a id='n722' href='#n722'>722</a> <a id='n723' href='#n723'>723</a> <a id='n724' href='#n724'>724</a> <a id='n725' href='#n725'>725</a> <a id='n726' href='#n726'>726</a> <a id='n727' href='#n727'>727</a> <a id='n728' href='#n728'>728</a> <a id='n729' href='#n729'>729</a> <a id='n730' href='#n730'>730</a> <a id='n731' href='#n731'>731</a> <a id='n732' href='#n732'>732</a> <a id='n733' href='#n733'>733</a> <a id='n734' href='#n734'>734</a> <a id='n735' href='#n735'>735</a> <a id='n736' href='#n736'>736</a> <a id='n737' href='#n737'>737</a> <a id='n738' href='#n738'>738</a> <a id='n739' href='#n739'>739</a> <a id='n740' href='#n740'>740</a> <a id='n741' href='#n741'>741</a> <a id='n742' href='#n742'>742</a> <a id='n743' href='#n743'>743</a> <a id='n744' href='#n744'>744</a> <a id='n745' href='#n745'>745</a> <a id='n746' href='#n746'>746</a> <a id='n747' href='#n747'>747</a> <a id='n748' href='#n748'>748</a> <a id='n749' href='#n749'>749</a> <a id='n750' href='#n750'>750</a> <a id='n751' href='#n751'>751</a> <a id='n752' href='#n752'>752</a> <a id='n753' href='#n753'>753</a> <a id='n754' href='#n754'>754</a> <a id='n755' href='#n755'>755</a> <a id='n756' href='#n756'>756</a> <a id='n757' href='#n757'>757</a> <a id='n758' href='#n758'>758</a> <a id='n759' href='#n759'>759</a> <a id='n760' href='#n760'>760</a> <a id='n761' href='#n761'>761</a> <a id='n762' href='#n762'>762</a> <a id='n763' href='#n763'>763</a> <a id='n764' href='#n764'>764</a> <a id='n765' href='#n765'>765</a> <a id='n766' href='#n766'>766</a> <a id='n767' href='#n767'>767</a> <a id='n768' href='#n768'>768</a> <a id='n769' href='#n769'>769</a> <a id='n770' href='#n770'>770</a> <a id='n771' href='#n771'>771</a> <a id='n772' href='#n772'>772</a> <a id='n773' href='#n773'>773</a> <a id='n774' href='#n774'>774</a> <a id='n775' href='#n775'>775</a> <a id='n776' href='#n776'>776</a> <a id='n777' href='#n777'>777</a> <a id='n778' href='#n778'>778</a> <a id='n779' href='#n779'>779</a> <a id='n780' href='#n780'>780</a> <a id='n781' href='#n781'>781</a> <a id='n782' href='#n782'>782</a> <a id='n783' href='#n783'>783</a> <a id='n784' href='#n784'>784</a> <a id='n785' href='#n785'>785</a> <a id='n786' href='#n786'>786</a> <a id='n787' href='#n787'>787</a> <a id='n788' href='#n788'>788</a> <a id='n789' href='#n789'>789</a> <a id='n790' href='#n790'>790</a> <a id='n791' href='#n791'>791</a> <a id='n792' href='#n792'>792</a> <a id='n793' href='#n793'>793</a> <a id='n794' href='#n794'>794</a> <a id='n795' href='#n795'>795</a> <a id='n796' href='#n796'>796</a> <a id='n797' href='#n797'>797</a> <a id='n798' href='#n798'>798</a> <a id='n799' href='#n799'>799</a> <a id='n800' href='#n800'>800</a> <a id='n801' href='#n801'>801</a> <a id='n802' href='#n802'>802</a> <a id='n803' href='#n803'>803</a> <a id='n804' href='#n804'>804</a> <a id='n805' href='#n805'>805</a> <a id='n806' href='#n806'>806</a> <a id='n807' href='#n807'>807</a> <a id='n808' href='#n808'>808</a> <a id='n809' href='#n809'>809</a> <a id='n810' href='#n810'>810</a> <a id='n811' href='#n811'>811</a> <a id='n812' href='#n812'>812</a> <a id='n813' href='#n813'>813</a> <a id='n814' href='#n814'>814</a> <a id='n815' href='#n815'>815</a> <a id='n816' href='#n816'>816</a> <a id='n817' href='#n817'>817</a> <a id='n818' href='#n818'>818</a> <a id='n819' href='#n819'>819</a> <a id='n820' href='#n820'>820</a> <a id='n821' href='#n821'>821</a> <a id='n822' href='#n822'>822</a> <a id='n823' href='#n823'>823</a> <a id='n824' href='#n824'>824</a> <a id='n825' href='#n825'>825</a> <a id='n826' href='#n826'>826</a> <a id='n827' href='#n827'>827</a> <a id='n828' href='#n828'>828</a> <a id='n829' href='#n829'>829</a> <a id='n830' href='#n830'>830</a> <a id='n831' href='#n831'>831</a> <a id='n832' href='#n832'>832</a> <a id='n833' href='#n833'>833</a> <a id='n834' href='#n834'>834</a> <a id='n835' href='#n835'>835</a> <a id='n836' href='#n836'>836</a> <a id='n837' href='#n837'>837</a> <a id='n838' href='#n838'>838</a> <a id='n839' href='#n839'>839</a> <a id='n840' href='#n840'>840</a> <a id='n841' href='#n841'>841</a> <a id='n842' href='#n842'>842</a> <a id='n843' href='#n843'>843</a> <a id='n844' href='#n844'>844</a> <a id='n845' href='#n845'>845</a> <a id='n846' href='#n846'>846</a> <a id='n847' href='#n847'>847</a> <a id='n848' href='#n848'>848</a> <a id='n849' href='#n849'>849</a> <a id='n850' href='#n850'>850</a> <a id='n851' href='#n851'>851</a> <a id='n852' href='#n852'>852</a> <a id='n853' href='#n853'>853</a> <a id='n854' href='#n854'>854</a> <a id='n855' href='#n855'>855</a> <a id='n856' href='#n856'>856</a> <a id='n857' href='#n857'>857</a> <a id='n858' href='#n858'>858</a> <a id='n859' href='#n859'>859</a> <a id='n860' href='#n860'>860</a> <a id='n861' href='#n861'>861</a> <a id='n862' href='#n862'>862</a> <a id='n863' href='#n863'>863</a> <a id='n864' href='#n864'>864</a> <a id='n865' href='#n865'>865</a> <a id='n866' href='#n866'>866</a> <a id='n867' href='#n867'>867</a> <a id='n868' href='#n868'>868</a> <a id='n869' href='#n869'>869</a> <a id='n870' href='#n870'>870</a> <a id='n871' href='#n871'>871</a> <a id='n872' href='#n872'>872</a> <a id='n873' href='#n873'>873</a> <a id='n874' href='#n874'>874</a> <a id='n875' href='#n875'>875</a> <a id='n876' href='#n876'>876</a> <a id='n877' href='#n877'>877</a> <a id='n878' href='#n878'>878</a> <a id='n879' href='#n879'>879</a> <a id='n880' href='#n880'>880</a> <a id='n881' href='#n881'>881</a> <a id='n882' href='#n882'>882</a> <a id='n883' href='#n883'>883</a> <a id='n884' href='#n884'>884</a> <a id='n885' href='#n885'>885</a> <a id='n886' href='#n886'>886</a> <a id='n887' href='#n887'>887</a> <a id='n888' href='#n888'>888</a> <a id='n889' href='#n889'>889</a> <a id='n890' href='#n890'>890</a> <a id='n891' href='#n891'>891</a> <a id='n892' href='#n892'>892</a> <a id='n893' href='#n893'>893</a> <a id='n894' href='#n894'>894</a> <a id='n895' href='#n895'>895</a> <a id='n896' href='#n896'>896</a> <a id='n897' href='#n897'>897</a> <a id='n898' href='#n898'>898</a> <a id='n899' href='#n899'>899</a> <a id='n900' href='#n900'>900</a> <a id='n901' href='#n901'>901</a> <a id='n902' href='#n902'>902</a> <a id='n903' href='#n903'>903</a> <a id='n904' href='#n904'>904</a> <a id='n905' href='#n905'>905</a> <a id='n906' href='#n906'>906</a> <a id='n907' href='#n907'>907</a> <a id='n908' href='#n908'>908</a> <a id='n909' href='#n909'>909</a> <a id='n910' href='#n910'>910</a> <a id='n911' href='#n911'>911</a> <a id='n912' href='#n912'>912</a> <a id='n913' href='#n913'>913</a> <a id='n914' href='#n914'>914</a> <a id='n915' href='#n915'>915</a> <a id='n916' href='#n916'>916</a> <a id='n917' href='#n917'>917</a> <a id='n918' href='#n918'>918</a> <a id='n919' href='#n919'>919</a> <a id='n920' href='#n920'>920</a> <a id='n921' href='#n921'>921</a> <a id='n922' href='#n922'>922</a> <a id='n923' href='#n923'>923</a> <a id='n924' href='#n924'>924</a> <a id='n925' href='#n925'>925</a> <a id='n926' href='#n926'>926</a> <a id='n927' href='#n927'>927</a> <a id='n928' href='#n928'>928</a> <a id='n929' href='#n929'>929</a> <a id='n930' href='#n930'>930</a> <a id='n931' href='#n931'>931</a> <a id='n932' href='#n932'>932</a> <a id='n933' href='#n933'>933</a> <a id='n934' href='#n934'>934</a> <a id='n935' href='#n935'>935</a> <a id='n936' href='#n936'>936</a> <a id='n937' href='#n937'>937</a> <a id='n938' href='#n938'>938</a> <a id='n939' href='#n939'>939</a> <a id='n940' href='#n940'>940</a> <a id='n941' href='#n941'>941</a> <a id='n942' href='#n942'>942</a> <a id='n943' href='#n943'>943</a> <a id='n944' href='#n944'>944</a> <a id='n945' href='#n945'>945</a> <a id='n946' href='#n946'>946</a> <a id='n947' href='#n947'>947</a> <a id='n948' href='#n948'>948</a> <a id='n949' href='#n949'>949</a> <a id='n950' href='#n950'>950</a> <a id='n951' href='#n951'>951</a> <a id='n952' href='#n952'>952</a> <a id='n953' href='#n953'>953</a> <a id='n954' href='#n954'>954</a> <a id='n955' href='#n955'>955</a> <a id='n956' href='#n956'>956</a> <a id='n957' href='#n957'>957</a> <a id='n958' href='#n958'>958</a> <a id='n959' href='#n959'>959</a> <a id='n960' href='#n960'>960</a> <a id='n961' href='#n961'>961</a> <a id='n962' href='#n962'>962</a> <a id='n963' href='#n963'>963</a> <a id='n964' href='#n964'>964</a> <a id='n965' href='#n965'>965</a> <a id='n966' href='#n966'>966</a> <a id='n967' href='#n967'>967</a> <a id='n968' href='#n968'>968</a> <a id='n969' href='#n969'>969</a> <a id='n970' href='#n970'>970</a> <a id='n971' href='#n971'>971</a> <a id='n972' href='#n972'>972</a> <a id='n973' href='#n973'>973</a> <a id='n974' href='#n974'>974</a> <a id='n975' href='#n975'>975</a> <a id='n976' href='#n976'>976</a> <a id='n977' href='#n977'>977</a> <a id='n978' href='#n978'>978</a> <a id='n979' href='#n979'>979</a> <a id='n980' href='#n980'>980</a> <a id='n981' href='#n981'>981</a> <a id='n982' href='#n982'>982</a> <a id='n983' href='#n983'>983</a> <a id='n984' href='#n984'>984</a> <a id='n985' href='#n985'>985</a> <a id='n986' href='#n986'>986</a> <a id='n987' href='#n987'>987</a> <a id='n988' href='#n988'>988</a> <a id='n989' href='#n989'>989</a> <a id='n990' href='#n990'>990</a> <a id='n991' href='#n991'>991</a> <a id='n992' href='#n992'>992</a> <a id='n993' href='#n993'>993</a> <a id='n994' href='#n994'>994</a> <a id='n995' href='#n995'>995</a> <a id='n996' href='#n996'>996</a> <a id='n997' href='#n997'>997</a> <a id='n998' href='#n998'>998</a> <a id='n999' href='#n999'>999</a> <a id='n1000' href='#n1000'>1000</a> <a id='n1001' href='#n1001'>1001</a> <a id='n1002' href='#n1002'>1002</a> <a id='n1003' href='#n1003'>1003</a> <a id='n1004' href='#n1004'>1004</a> <a id='n1005' href='#n1005'>1005</a> <a id='n1006' href='#n1006'>1006</a> <a id='n1007' href='#n1007'>1007</a> <a id='n1008' href='#n1008'>1008</a> <a id='n1009' href='#n1009'>1009</a> <a id='n1010' href='#n1010'>1010</a> <a id='n1011' href='#n1011'>1011</a> <a id='n1012' href='#n1012'>1012</a> <a id='n1013' href='#n1013'>1013</a> <a id='n1014' href='#n1014'>1014</a> <a id='n1015' href='#n1015'>1015</a> <a id='n1016' href='#n1016'>1016</a> <a id='n1017' href='#n1017'>1017</a> <a id='n1018' href='#n1018'>1018</a> <a id='n1019' href='#n1019'>1019</a> <a id='n1020' href='#n1020'>1020</a> <a id='n1021' href='#n1021'>1021</a> <a id='n1022' href='#n1022'>1022</a> <a id='n1023' href='#n1023'>1023</a> <a id='n1024' href='#n1024'>1024</a> <a id='n1025' href='#n1025'>1025</a> <a id='n1026' href='#n1026'>1026</a> <a id='n1027' href='#n1027'>1027</a> <a id='n1028' href='#n1028'>1028</a> <a id='n1029' href='#n1029'>1029</a> <a id='n1030' href='#n1030'>1030</a> <a id='n1031' href='#n1031'>1031</a> <a id='n1032' href='#n1032'>1032</a> <a id='n1033' href='#n1033'>1033</a> <a id='n1034' href='#n1034'>1034</a> <a id='n1035' href='#n1035'>1035</a> <a id='n1036' href='#n1036'>1036</a> <a id='n1037' href='#n1037'>1037</a> <a id='n1038' href='#n1038'>1038</a> <a id='n1039' href='#n1039'>1039</a> <a id='n1040' href='#n1040'>1040</a> <a id='n1041' href='#n1041'>1041</a> <a id='n1042' href='#n1042'>1042</a> <a id='n1043' href='#n1043'>1043</a> <a id='n1044' href='#n1044'>1044</a> <a id='n1045' href='#n1045'>1045</a> <a id='n1046' href='#n1046'>1046</a> <a id='n1047' href='#n1047'>1047</a> <a id='n1048' href='#n1048'>1048</a> <a id='n1049' href='#n1049'>1049</a> <a id='n1050' href='#n1050'>1050</a> <a id='n1051' href='#n1051'>1051</a> <a id='n1052' href='#n1052'>1052</a> <a id='n1053' href='#n1053'>1053</a> <a id='n1054' href='#n1054'>1054</a> <a id='n1055' href='#n1055'>1055</a> <a id='n1056' href='#n1056'>1056</a> <a id='n1057' href='#n1057'>1057</a> <a id='n1058' href='#n1058'>1058</a> <a id='n1059' href='#n1059'>1059</a> <a id='n1060' href='#n1060'>1060</a> <a id='n1061' href='#n1061'>1061</a> <a id='n1062' href='#n1062'>1062</a> <a id='n1063' href='#n1063'>1063</a> <a id='n1064' href='#n1064'>1064</a> <a id='n1065' href='#n1065'>1065</a> <a id='n1066' href='#n1066'>1066</a> <a id='n1067' href='#n1067'>1067</a> <a id='n1068' href='#n1068'>1068</a> <a id='n1069' href='#n1069'>1069</a> <a id='n1070' href='#n1070'>1070</a> <a id='n1071' href='#n1071'>1071</a> <a id='n1072' href='#n1072'>1072</a> <a id='n1073' href='#n1073'>1073</a> <a id='n1074' href='#n1074'>1074</a> <a id='n1075' href='#n1075'>1075</a> <a id='n1076' href='#n1076'>1076</a> <a id='n1077' href='#n1077'>1077</a> <a id='n1078' href='#n1078'>1078</a> <a id='n1079' href='#n1079'>1079</a> <a id='n1080' href='#n1080'>1080</a> <a id='n1081' href='#n1081'>1081</a> <a id='n1082' href='#n1082'>1082</a> <a id='n1083' href='#n1083'>1083</a> <a id='n1084' href='#n1084'>1084</a> <a id='n1085' href='#n1085'>1085</a> <a id='n1086' href='#n1086'>1086</a> <a id='n1087' href='#n1087'>1087</a> <a id='n1088' href='#n1088'>1088</a> <a id='n1089' href='#n1089'>1089</a> <a id='n1090' href='#n1090'>1090</a> <a id='n1091' href='#n1091'>1091</a> <a id='n1092' href='#n1092'>1092</a> <a id='n1093' href='#n1093'>1093</a> <a id='n1094' href='#n1094'>1094</a> <a id='n1095' href='#n1095'>1095</a> <a id='n1096' href='#n1096'>1096</a> <a id='n1097' href='#n1097'>1097</a> <a id='n1098' href='#n1098'>1098</a> <a id='n1099' href='#n1099'>1099</a> <a id='n1100' href='#n1100'>1100</a> <a id='n1101' href='#n1101'>1101</a> <a id='n1102' href='#n1102'>1102</a> <a id='n1103' href='#n1103'>1103</a> <a id='n1104' href='#n1104'>1104</a> <a id='n1105' href='#n1105'>1105</a> <a id='n1106' href='#n1106'>1106</a> <a id='n1107' href='#n1107'>1107</a> <a id='n1108' href='#n1108'>1108</a> <a id='n1109' href='#n1109'>1109</a> <a id='n1110' href='#n1110'>1110</a> <a id='n1111' href='#n1111'>1111</a> <a id='n1112' href='#n1112'>1112</a> <a id='n1113' href='#n1113'>1113</a> <a id='n1114' href='#n1114'>1114</a> <a id='n1115' href='#n1115'>1115</a> <a id='n1116' href='#n1116'>1116</a> <a id='n1117' href='#n1117'>1117</a> <a id='n1118' href='#n1118'>1118</a> <a id='n1119' href='#n1119'>1119</a> <a id='n1120' href='#n1120'>1120</a> <a id='n1121' href='#n1121'>1121</a> <a id='n1122' href='#n1122'>1122</a> <a id='n1123' href='#n1123'>1123</a> <a id='n1124' href='#n1124'>1124</a> <a id='n1125' href='#n1125'>1125</a> <a id='n1126' href='#n1126'>1126</a> <a id='n1127' href='#n1127'>1127</a> <a id='n1128' href='#n1128'>1128</a> <a id='n1129' href='#n1129'>1129</a> <a id='n1130' href='#n1130'>1130</a> <a id='n1131' href='#n1131'>1131</a> <a id='n1132' href='#n1132'>1132</a> <a id='n1133' href='#n1133'>1133</a> <a id='n1134' href='#n1134'>1134</a> <a id='n1135' href='#n1135'>1135</a> <a id='n1136' href='#n1136'>1136</a> <a id='n1137' href='#n1137'>1137</a> <a id='n1138' href='#n1138'>1138</a> <a id='n1139' href='#n1139'>1139</a> <a id='n1140' href='#n1140'>1140</a> <a id='n1141' href='#n1141'>1141</a> <a id='n1142' href='#n1142'>1142</a> <a id='n1143' href='#n1143'>1143</a> <a id='n1144' href='#n1144'>1144</a> <a id='n1145' href='#n1145'>1145</a> <a id='n1146' href='#n1146'>1146</a> <a id='n1147' href='#n1147'>1147</a> <a id='n1148' href='#n1148'>1148</a> <a id='n1149' href='#n1149'>1149</a> <a id='n1150' href='#n1150'>1150</a> <a id='n1151' href='#n1151'>1151</a> <a id='n1152' href='#n1152'>1152</a> <a id='n1153' href='#n1153'>1153</a> <a id='n1154' href='#n1154'>1154</a> <a id='n1155' href='#n1155'>1155</a> <a id='n1156' href='#n1156'>1156</a> <a id='n1157' href='#n1157'>1157</a> <a id='n1158' href='#n1158'>1158</a> <a id='n1159' href='#n1159'>1159</a> <a id='n1160' href='#n1160'>1160</a> <a id='n1161' href='#n1161'>1161</a> <a id='n1162' href='#n1162'>1162</a> <a id='n1163' href='#n1163'>1163</a> <a id='n1164' href='#n1164'>1164</a> <a id='n1165' href='#n1165'>1165</a> <a id='n1166' href='#n1166'>1166</a> <a id='n1167' href='#n1167'>1167</a> <a id='n1168' href='#n1168'>1168</a> <a id='n1169' href='#n1169'>1169</a> <a id='n1170' href='#n1170'>1170</a> <a id='n1171' href='#n1171'>1171</a> <a id='n1172' href='#n1172'>1172</a> <a id='n1173' href='#n1173'>1173</a> <a id='n1174' href='#n1174'>1174</a> <a id='n1175' href='#n1175'>1175</a> <a id='n1176' href='#n1176'>1176</a> <a id='n1177' href='#n1177'>1177</a> <a id='n1178' href='#n1178'>1178</a> <a id='n1179' href='#n1179'>1179</a> <a id='n1180' href='#n1180'>1180</a> <a id='n1181' href='#n1181'>1181</a> <a id='n1182' href='#n1182'>1182</a> <a id='n1183' href='#n1183'>1183</a> <a id='n1184' href='#n1184'>1184</a> <a id='n1185' href='#n1185'>1185</a> <a id='n1186' href='#n1186'>1186</a> <a id='n1187' href='#n1187'>1187</a> <a id='n1188' href='#n1188'>1188</a> <a id='n1189' href='#n1189'>1189</a> <a id='n1190' href='#n1190'>1190</a> <a id='n1191' href='#n1191'>1191</a> <a id='n1192' href='#n1192'>1192</a> <a id='n1193' href='#n1193'>1193</a> <a id='n1194' href='#n1194'>1194</a> <a id='n1195' href='#n1195'>1195</a> <a id='n1196' href='#n1196'>1196</a> <a id='n1197' href='#n1197'>1197</a> <a id='n1198' href='#n1198'>1198</a> <a id='n1199' href='#n1199'>1199</a> <a id='n1200' href='#n1200'>1200</a> <a id='n1201' href='#n1201'>1201</a> <a id='n1202' href='#n1202'>1202</a> <a id='n1203' href='#n1203'>1203</a> <a id='n1204' href='#n1204'>1204</a> <a id='n1205' href='#n1205'>1205</a> <a id='n1206' href='#n1206'>1206</a> <a id='n1207' href='#n1207'>1207</a> <a id='n1208' href='#n1208'>1208</a> <a id='n1209' href='#n1209'>1209</a> <a id='n1210' href='#n1210'>1210</a> <a id='n1211' href='#n1211'>1211</a> <a id='n1212' href='#n1212'>1212</a> <a id='n1213' href='#n1213'>1213</a> <a id='n1214' href='#n1214'>1214</a> <a id='n1215' href='#n1215'>1215</a> <a id='n1216' href='#n1216'>1216</a> <a id='n1217' href='#n1217'>1217</a> <a id='n1218' href='#n1218'>1218</a> <a id='n1219' href='#n1219'>1219</a> <a id='n1220' href='#n1220'>1220</a> <a id='n1221' href='#n1221'>1221</a> <a id='n1222' href='#n1222'>1222</a> <a id='n1223' href='#n1223'>1223</a> <a id='n1224' href='#n1224'>1224</a> <a id='n1225' href='#n1225'>1225</a> <a id='n1226' href='#n1226'>1226</a> <a id='n1227' href='#n1227'>1227</a> <a id='n1228' href='#n1228'>1228</a> <a id='n1229' href='#n1229'>1229</a> <a id='n1230' href='#n1230'>1230</a> <a id='n1231' href='#n1231'>1231</a> <a id='n1232' href='#n1232'>1232</a> <a id='n1233' href='#n1233'>1233</a> <a id='n1234' href='#n1234'>1234</a> <a id='n1235' href='#n1235'>1235</a> <a id='n1236' href='#n1236'>1236</a> <a id='n1237' href='#n1237'>1237</a> <a id='n1238' href='#n1238'>1238</a> <a id='n1239' href='#n1239'>1239</a> <a id='n1240' href='#n1240'>1240</a> <a id='n1241' href='#n1241'>1241</a> <a id='n1242' href='#n1242'>1242</a> <a id='n1243' href='#n1243'>1243</a> <a id='n1244' href='#n1244'>1244</a> <a id='n1245' href='#n1245'>1245</a> <a id='n1246' href='#n1246'>1246</a> <a id='n1247' href='#n1247'>1247</a> <a id='n1248' href='#n1248'>1248</a> <a id='n1249' href='#n1249'>1249</a> <a id='n1250' href='#n1250'>1250</a> <a id='n1251' href='#n1251'>1251</a> <a id='n1252' href='#n1252'>1252</a> <a id='n1253' href='#n1253'>1253</a> <a id='n1254' href='#n1254'>1254</a> <a id='n1255' href='#n1255'>1255</a> <a id='n1256' href='#n1256'>1256</a> <a id='n1257' href='#n1257'>1257</a> <a id='n1258' href='#n1258'>1258</a> </pre></td> <td class='lines'><pre><code><span class="hl kwa">package</span> lang<span class="hl opt">;</span> <span class="hl slc"># $Id$</span> <span class="hl kwa">use</span> diagnostics<span class="hl opt">;</span> <span class="hl kwa">use</span> strict<span class="hl opt">;</span> <span class="hl kwa">use</span> common<span class="hl opt">;</span> <span class="hl kwa">use</span> <span class="hl kwc">log</span><span class="hl opt">;</span> <span class="hl slc">#- key: lang name (locale name for some (~5) special cases needing</span> <span class="hl slc">#- extra distinctions)</span> <span class="hl slc">#- [0]: lang name in english</span> <span class="hl slc">#- [1]: transliterated locale name in the locale name (used for sorting)</span> <span class="hl slc">#- [2]: default locale name to use for that language if there isn't</span> <span class="hl slc">#- an existing locale for the combination language+country choosen</span> <span class="hl slc">#- [3]: geographic groups that this language belongs to (for displaying</span> <span class="hl slc">#- in the menu grouped in smaller lists), 1=Europe, 2=Asia, 3=Africa,</span> <span class="hl slc">#- 4=Oceania&Pacific, 5=America (if you wonder, it's the order</span> <span class="hl slc">#- used in the olympic flag)</span> <span class="hl slc">#- [4]: special value for LANGUAGE variable (if different of the default</span> <span class="hl slc">#- of 'll_CC:ll_DD:ll' (ll_CC: locale (if exist) resulting of the</span> <span class="hl slc">#- combination of chosen lang (ll) and country (CC), ll_DD: the</span> <span class="hl slc">#- default locale shown here (field [2]) and ll: the language (the key))</span> <span class="hl kwc">our</span> <span class="hl kwb">%langs</span> <span class="hl opt">= (</span> <span class="hl str">'af'</span> <span class="hl opt">=> [</span> <span class="hl str">'Afrikaans'</span><span class="hl opt">,</span> <span class="hl str">'Afrikaans'</span><span class="hl opt">,</span> <span class="hl str">'af_ZA'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'am'</span> <span class="hl opt">=> [</span> <span class="hl str">'Amharic'</span><span class="hl opt">,</span> <span class="hl str">'ZZ emarNa'</span><span class="hl opt">,</span> <span class="hl str">'am_ET'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'utf_am'</span> <span class="hl opt">],</span> <span class="hl str">'ar'</span> <span class="hl opt">=> [</span> <span class="hl str">'Arabic'</span><span class="hl opt">,</span> <span class="hl str">'AA Arabic'</span><span class="hl opt">,</span> <span class="hl str">'ar_EG'</span><span class="hl opt">,</span> <span class="hl str">' 23 '</span><span class="hl opt">,</span> <span class="hl str">'utf_ar'</span> <span class="hl opt">],</span> <span class="hl str">'as'</span> <span class="hl opt">=> [</span> <span class="hl str">'Assamese'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Assamese'</span><span class="hl opt">,</span> <span class="hl str">'as_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_bn'</span> <span class="hl opt">],</span> <span class="hl str">'az'</span> <span class="hl opt">=> [</span> <span class="hl str">'Azeri (Latin)'</span><span class="hl opt">,</span> <span class="hl str">'Azerbaycanca'</span><span class="hl opt">,</span> <span class="hl str">'az_AZ'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_az'</span> <span class="hl opt">],</span> <span class="hl str">'be'</span> <span class="hl opt">=> [</span> <span class="hl str">'Belarussian'</span><span class="hl opt">,</span> <span class="hl str">'Belaruskaya'</span><span class="hl opt">,</span> <span class="hl str">'be_BY'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'cp1251'</span> <span class="hl opt">],</span> <span class="hl slc">#-'ber' => [ 'Berber', 'ZZ Tamazight', 'ber_MA',' 3 ', 'unicode' ],</span> <span class="hl str">'bg'</span> <span class="hl opt">=> [</span> <span class="hl str">'Bulgarian'</span><span class="hl opt">,</span> <span class="hl str">'Blgarski'</span><span class="hl opt">,</span> <span class="hl str">'bg_BG'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'cp1251'</span> <span class="hl opt">],</span> <span class="hl str">'bn'</span> <span class="hl opt">=> [</span> <span class="hl str">'Bengali'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Bengali'</span><span class="hl opt">,</span> <span class="hl str">'bn_BD'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_bn'</span> <span class="hl opt">],</span> <span class="hl str">'br'</span> <span class="hl opt">=> [</span> <span class="hl str">'Britton'</span><span class="hl opt">,</span> <span class="hl str">'Brezhoneg'</span><span class="hl opt">,</span> <span class="hl str">'br_FR'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'br:fr_FR:fr'</span> <span class="hl opt">],</span> <span class="hl str">'bs'</span> <span class="hl opt">=> [</span> <span class="hl str">'Bosnian'</span><span class="hl opt">,</span> <span class="hl str">'Bosanski'</span><span class="hl opt">,</span> <span class="hl str">'bs_BA'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'ca'</span> <span class="hl opt">=> [</span> <span class="hl str">'Catalan'</span><span class="hl opt">,</span> <span class="hl str">'Catala'</span><span class="hl opt">,</span> <span class="hl str">'ca_ES'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'ca:es_ES:es'</span> <span class="hl opt">],</span> <span class="hl str">'cs'</span> <span class="hl opt">=> [</span> <span class="hl str">'Czech'</span><span class="hl opt">,</span> <span class="hl str">'Cestina'</span><span class="hl opt">,</span> <span class="hl str">'cs_CZ'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'cy'</span> <span class="hl opt">=> [</span> <span class="hl str">'Welsh'</span><span class="hl opt">,</span> <span class="hl str">'Cymraeg'</span><span class="hl opt">,</span> <span class="hl str">'cy_GB'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'utf_lat8'</span><span class="hl opt">,</span> <span class="hl str">'cy:en_GB:en'</span> <span class="hl opt">],</span> <span class="hl str">'da'</span> <span class="hl opt">=> [</span> <span class="hl str">'Danish'</span><span class="hl opt">,</span> <span class="hl str">'Dansk'</span><span class="hl opt">,</span> <span class="hl str">'da_DK'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'de'</span> <span class="hl opt">=> [</span> <span class="hl str">'German'</span><span class="hl opt">,</span> <span class="hl str">'Deutsch'</span><span class="hl opt">,</span> <span class="hl str">'de_DE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl slc">#-'dz' => [ 'Buthanese', 'ZZ Dzhonka', 'dz_BT', ' 2 ', 'unicode' ],</span> <span class="hl str">'el'</span> <span class="hl opt">=> [</span> <span class="hl str">'Greek'</span><span class="hl opt">,</span> <span class="hl str">'Ellynika'</span><span class="hl opt">,</span> <span class="hl str">'el_GR'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-7'</span> <span class="hl opt">],</span> <span class="hl str">'en_GB'</span> <span class="hl opt">=> [</span> <span class="hl str">'English'</span><span class="hl opt">,</span> <span class="hl str">'English'</span><span class="hl opt">,</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'12345'</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'en_US'</span> <span class="hl opt">=> [</span> <span class="hl str">'English (American)'</span><span class="hl opt">,</span> <span class="hl str">'English (American)'</span><span class="hl opt">,</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">' 5'</span><span class="hl opt">,</span> <span class="hl str">'C'</span> <span class="hl opt">],</span> <span class="hl str">'en_IE'</span> <span class="hl opt">=> [</span> <span class="hl str">'English (Ireland)'</span><span class="hl opt">,</span> <span class="hl str">'English (Ireland)'</span><span class="hl opt">,</span> <span class="hl str">'en_IE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'en_IE:en_GB:en'</span> <span class="hl opt">],</span> <span class="hl str">'eo'</span> <span class="hl opt">=> [</span> <span class="hl str">'Esperanto'</span><span class="hl opt">,</span> <span class="hl str">'Esperanto'</span><span class="hl opt">,</span> <span class="hl str">'eo_XX'</span><span class="hl opt">,</span> <span class="hl str">'12345'</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl str">'es'</span> <span class="hl opt">=> [</span> <span class="hl str">'Spanish'</span><span class="hl opt">,</span> <span class="hl str">'Espanol'</span><span class="hl opt">,</span> <span class="hl str">'es_ES'</span><span class="hl opt">,</span> <span class="hl str">'1 3 5'</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'et'</span> <span class="hl opt">=> [</span> <span class="hl str">'Estonian'</span><span class="hl opt">,</span> <span class="hl str">'Eesti'</span><span class="hl opt">,</span> <span class="hl str">'et_EE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'eu'</span> <span class="hl opt">=> [</span> <span class="hl str">'Euskara (Basque)'</span><span class="hl opt">,</span> <span class="hl str">'Euskara'</span><span class="hl opt">,</span> <span class="hl str">'eu_ES'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'fa'</span> <span class="hl opt">=> [</span> <span class="hl str">'Farsi (Iranian)'</span><span class="hl opt">,</span> <span class="hl str">'AA Farsi'</span><span class="hl opt">,</span> <span class="hl str">'fa_IR'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_ar'</span> <span class="hl opt">],</span> <span class="hl str">'fi'</span> <span class="hl opt">=> [</span> <span class="hl str">'Finnish (Suomi)'</span><span class="hl opt">,</span> <span class="hl str">'Suomi'</span><span class="hl opt">,</span> <span class="hl str">'fi_FI'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'fo'</span> <span class="hl opt">=> [</span> <span class="hl str">'Faroese'</span><span class="hl opt">,</span> <span class="hl str">'Foroyskt'</span><span class="hl opt">,</span> <span class="hl str">'fo_FO'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'fr'</span> <span class="hl opt">=> [</span> <span class="hl str">'French'</span><span class="hl opt">,</span> <span class="hl str">'Francais'</span><span class="hl opt">,</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'1 345'</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl slc">#'fur' => [ 'Furlan', 'Furlan', 'fur_IT', '1 ', 'iso-8859-15', 'fur:it_IT:it' ],</span> <span class="hl str">'ga'</span> <span class="hl opt">=> [</span> <span class="hl str">'Gaelic (Irish)'</span><span class="hl opt">,</span> <span class="hl str">'Gaeilge'</span><span class="hl opt">,</span> <span class="hl str">'ga_IE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'ga:en_IE:en_GB:en'</span> <span class="hl opt">],</span> <span class="hl slc">#'gd' => [ 'Gaelic (Scottish)', 'Gaidhlig', 'gd_GB', '1 ', 'utf_lat8', 'gd:en_GB:en' ],</span> <span class="hl str">'gl'</span> <span class="hl opt">=> [</span> <span class="hl str">'Galician'</span><span class="hl opt">,</span> <span class="hl str">'Galego'</span><span class="hl opt">,</span> <span class="hl str">'gl_ES'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'gl:es_ES:es:pt:pt_BR'</span> <span class="hl opt">],</span> <span class="hl slc">#'gn' => [ 'Guarani', 'Avane-e', 'gn_PY', ' 5', 'utf8', 'gn:es_PY:es' ],</span> <span class="hl str">'gu'</span> <span class="hl opt">=> [</span> <span class="hl str">'Gujarati'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Gujarati'</span><span class="hl opt">,</span> <span class="hl str">'gu_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl slc">#'gv' => [ 'Gaelic (Manx)', 'Gaelg', 'gv_GB', '1 ', 'utf_lat8', 'gv:en_GB:en' ],</span> <span class="hl str">'he'</span> <span class="hl opt">=> [</span> <span class="hl str">'Hebrew'</span><span class="hl opt">,</span> <span class="hl str">'AA Ivrit'</span><span class="hl opt">,</span> <span class="hl str">'he_IL'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_he'</span> <span class="hl opt">],</span> <span class="hl str">'hi'</span> <span class="hl opt">=> [</span> <span class="hl str">'Hindi'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Hindi'</span><span class="hl opt">,</span> <span class="hl str">'hi_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_hi'</span> <span class="hl opt">],</span> <span class="hl str">'hr'</span> <span class="hl opt">=> [</span> <span class="hl str">'Croatian'</span><span class="hl opt">,</span> <span class="hl str">'Hrvatski'</span><span class="hl opt">,</span> <span class="hl str">'hr_HR'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'hu'</span> <span class="hl opt">=> [</span> <span class="hl str">'Hungarian'</span><span class="hl opt">,</span> <span class="hl str">'Magyar'</span><span class="hl opt">,</span> <span class="hl str">'hu_HU'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'hy'</span> <span class="hl opt">=> [</span> <span class="hl str">'Armenian'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Armenian'</span><span class="hl opt">,</span> <span class="hl str">'hy_AM'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_hy'</span> <span class="hl opt">],</span> <span class="hl slc"># locale not done yet</span> <span class="hl slc">#'ia' => [ 'Interlingua', 'Interlingua', 'ia_XX', '1 5', 'utf8' ],</span> <span class="hl str">'id'</span> <span class="hl opt">=> [</span> <span class="hl str">'Indonesian'</span><span class="hl opt">,</span> <span class="hl str">'Bahasa Indonesia'</span><span class="hl opt">,</span> <span class="hl str">'id_ID'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'is'</span> <span class="hl opt">=> [</span> <span class="hl str">'Icelandic'</span><span class="hl opt">,</span> <span class="hl str">'Islenska'</span><span class="hl opt">,</span> <span class="hl str">'is_IS'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'it'</span> <span class="hl opt">=> [</span> <span class="hl str">'Italian'</span><span class="hl opt">,</span> <span class="hl str">'Italiano'</span><span class="hl opt">,</span> <span class="hl str">'it_IT'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl slc">#-'iu' => [ 'Inuktitut', 'ZZ Inuktitut', 'iu_CA', ' 5', 'utf_iu' ],</span> <span class="hl str">'ja'</span> <span class="hl opt">=> [</span> <span class="hl str">'Japanese'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Nihongo'</span><span class="hl opt">,</span> <span class="hl str">'ja_JP'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'jisx0208'</span> <span class="hl opt">],</span> <span class="hl str">'ka'</span> <span class="hl opt">=> [</span> <span class="hl str">'Georgian'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Georgian'</span><span class="hl opt">,</span> <span class="hl str">'ka_GE'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_ka'</span> <span class="hl opt">],</span> <span class="hl slc">#-'kl' => [ 'Greenlandic (inuit)', 'ZZ Inuit', 'kl_GL', ' 5', 'iso-8859-1' ],</span> <span class="hl str">'kn'</span> <span class="hl opt">=> [</span> <span class="hl str">'Kannada'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Kannada'</span><span class="hl opt">,</span> <span class="hl str">'kn_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_kn'</span> <span class="hl opt">],</span> <span class="hl str">'ko'</span> <span class="hl opt">=> [</span> <span class="hl str">'Korean'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Korea'</span><span class="hl opt">,</span> <span class="hl str">'ko_KR'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'ksc5601'</span> <span class="hl opt">],</span> <span class="hl str">'ku'</span> <span class="hl opt">=> [</span> <span class="hl str">'Kurdish'</span><span class="hl opt">,</span> <span class="hl str">'Kurdi'</span><span class="hl opt">,</span> <span class="hl str">'ku_TR'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-9'</span> <span class="hl opt">],</span> <span class="hl slc">#-'kw' => [ 'Cornish', 'Kernewek', 'kw_GB', '1 ', 'utf_lat8', 'kw:en_GB:en' ],</span> <span class="hl str">'ky'</span> <span class="hl opt">=> [</span> <span class="hl str">'Kyrgyz'</span><span class="hl opt">,</span> <span class="hl str">'Kyrgyz'</span><span class="hl opt">,</span> <span class="hl str">'ky_KG'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr2'</span> <span class="hl opt">],</span> <span class="hl str">'li'</span> <span class="hl opt">=> [</span> <span class="hl str">'Limbourgish'</span><span class="hl opt">,</span> <span class="hl str">'Limburgs'</span><span class="hl opt">,</span> <span class="hl str">'li_NL'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'lo'</span> <span class="hl opt">=> [</span> <span class="hl str">'Laotian'</span><span class="hl opt">,</span> <span class="hl str">'Laotian'</span><span class="hl opt">,</span> <span class="hl str">'lo_LA'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_lo'</span> <span class="hl opt">],</span> <span class="hl str">'lt'</span> <span class="hl opt">=> [</span> <span class="hl str">'Lithuanian'</span><span class="hl opt">,</span> <span class="hl str">'Lietuviskai'</span><span class="hl opt">,</span> <span class="hl str">'lt_LT'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-13'</span> <span class="hl opt">],</span> <span class="hl slc">#- ltg_LV locale not done yet, using lv_LV for now</span> <span class="hl str">'ltg'</span> <span class="hl opt">=> [</span> <span class="hl str">'Latgalian'</span><span class="hl opt">,</span> <span class="hl str">'Latgalisu'</span><span class="hl opt">,</span> <span class="hl str">'lv_LV'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-13'</span><span class="hl opt">,</span> <span class="hl str">'ltg,lv'</span> <span class="hl opt">],</span> <span class="hl str">'lv'</span> <span class="hl opt">=> [</span> <span class="hl str">'Latvian'</span><span class="hl opt">,</span> <span class="hl str">'Latviesu'</span><span class="hl opt">,</span> <span class="hl str">'lv_LV'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-13'</span> <span class="hl opt">],</span> <span class="hl str">'mi'</span> <span class="hl opt">=> [</span> <span class="hl str">'Maori'</span><span class="hl opt">,</span> <span class="hl str">'Maori'</span><span class="hl opt">,</span> <span class="hl str">'mi_NZ'</span><span class="hl opt">,</span> <span class="hl str">' 4 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl str">'mk'</span> <span class="hl opt">=> [</span> <span class="hl str">'Macedonian'</span><span class="hl opt">,</span> <span class="hl str">'Makedonski'</span><span class="hl opt">,</span> <span class="hl str">'mk_MK'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr1'</span> <span class="hl opt">],</span> <span class="hl str">'ml'</span> <span class="hl opt">=> [</span> <span class="hl str">'Malayalam'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Malayalam'</span><span class="hl opt">,</span> <span class="hl str">'ml_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_ml'</span> <span class="hl opt">],</span> <span class="hl str">'mn'</span> <span class="hl opt">=> [</span> <span class="hl str">'Mongolian'</span><span class="hl opt">,</span> <span class="hl str">'Mongol'</span><span class="hl opt">,</span> <span class="hl str">'mn_MN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr2'</span> <span class="hl opt">],</span> <span class="hl str">'mr'</span> <span class="hl opt">=> [</span> <span class="hl str">'Marathi'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Marathi'</span><span class="hl opt">,</span> <span class="hl str">'mr_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_hi'</span> <span class="hl opt">],</span> <span class="hl str">'ms'</span> <span class="hl opt">=> [</span> <span class="hl str">'Malay'</span><span class="hl opt">,</span> <span class="hl str">'Bahasa Melayu'</span><span class="hl opt">,</span> <span class="hl str">'ms_MY'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'mt'</span> <span class="hl opt">=> [</span> <span class="hl str">'Maltese'</span><span class="hl opt">,</span> <span class="hl str">'Maltin'</span><span class="hl opt">,</span> <span class="hl str">'mt_MT'</span><span class="hl opt">,</span> <span class="hl str">'1 3 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl str">'nb'</span> <span class="hl opt">=> [</span> <span class="hl str">'Norwegian Bokmaal'</span><span class="hl opt">,</span> <span class="hl str">'Norsk, Bokmal'</span><span class="hl opt">,</span> <span class="hl str">'nb_NO'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'nb:no'</span> <span class="hl opt">],</span> <span class="hl str">'nds'</span> <span class="hl opt">=> [</span> <span class="hl str">'Low Saxon'</span><span class="hl opt">,</span> <span class="hl str">'Platduutsch'</span><span class="hl opt">,</span> <span class="hl str">'nds_DE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'nds_DE:nds'</span> <span class="hl opt">],</span> <span class="hl str">'ne'</span> <span class="hl opt">=> [</span> <span class="hl str">'Nepali'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Nepali'</span><span class="hl opt">,</span> <span class="hl str">'ne_NP'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl str">'nl'</span> <span class="hl opt">=> [</span> <span class="hl str">'Dutch'</span><span class="hl opt">,</span> <span class="hl str">'Nederlands'</span><span class="hl opt">,</span> <span class="hl str">'nl_NL'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span> <span class="hl opt">],</span> <span class="hl str">'nn'</span> <span class="hl opt">=> [</span> <span class="hl str">'Norwegian Nynorsk'</span><span class="hl opt">,</span> <span class="hl str">'Norsk, Nynorsk'</span><span class="hl opt">,</span> <span class="hl str">'nn_NO'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'nn:no</span><span class="hl ipl">@nynorsk</span><span class="hl str">:no_NY:no:nb'</span> <span class="hl opt">],</span> <span class="hl str">'oc'</span> <span class="hl opt">=> [</span> <span class="hl str">'Occitan'</span><span class="hl opt">,</span> <span class="hl str">'Occitan'</span><span class="hl opt">,</span> <span class="hl str">'oc_FR'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'oc:fr_FR:fr'</span> <span class="hl opt">],</span> <span class="hl slc"># 'tl' in priority position for now, as 'ph' is not yet official and 'tl'</span> <span class="hl slc"># is used instead. Monolingual window managers won't see the menus otherwise</span> <span class="hl str">'ph'</span> <span class="hl opt">=> [</span> <span class="hl str">'Filipino'</span><span class="hl opt">,</span> <span class="hl str">'Filipino'</span><span class="hl opt">,</span> <span class="hl str">'ph_PH'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'tl:ph'</span> <span class="hl opt">],</span> <span class="hl str">'pl'</span> <span class="hl opt">=> [</span> <span class="hl str">'Polish'</span><span class="hl opt">,</span> <span class="hl str">'Polski'</span><span class="hl opt">,</span> <span class="hl str">'pl_PL'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'pt'</span> <span class="hl opt">=> [</span> <span class="hl str">'Portuguese'</span><span class="hl opt">,</span> <span class="hl str">'Portugues'</span><span class="hl opt">,</span> <span class="hl str">'pt_PT'</span><span class="hl opt">,</span> <span class="hl str">'1 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'pt_PT:pt:pt_BR'</span> <span class="hl opt">],</span> <span class="hl str">'pt_BR'</span> <span class="hl opt">=> [</span> <span class="hl str">'Portuguese Brazil'</span><span class="hl opt">,</span> <span class="hl str">'Portugues do Brasil'</span><span class="hl opt">,</span> <span class="hl str">'pt_BR'</span><span class="hl opt">,</span> <span class="hl str">' 5'</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'pt_BR:pt_PT:pt'</span> <span class="hl opt">],</span> <span class="hl str">'ro'</span> <span class="hl opt">=> [</span> <span class="hl str">'Romanian'</span><span class="hl opt">,</span> <span class="hl str">'Romana'</span><span class="hl opt">,</span> <span class="hl str">'ro_RO'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'ru'</span> <span class="hl opt">=> [</span> <span class="hl str">'Russian'</span><span class="hl opt">,</span> <span class="hl str">'Russkij'</span><span class="hl opt">,</span> <span class="hl str">'ru_RU'</span><span class="hl opt">,</span> <span class="hl str">'12 '</span><span class="hl opt">,</span> <span class="hl str">'koi8-u'</span> <span class="hl opt">],</span> <span class="hl slc">#'sc' => [ 'Sardian', 'Sardu', 'sc_IT', '1 ', 'iso-8859-15', 'sc:it_IT:it' ],</span> <span class="hl str">'se'</span> <span class="hl opt">=> [</span> <span class="hl str">'Saami'</span><span class="hl opt">,</span> <span class="hl str">'Samegiella'</span><span class="hl opt">,</span> <span class="hl str">'se_NO'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl str">'sk'</span> <span class="hl opt">=> [</span> <span class="hl str">'Slovak'</span><span class="hl opt">,</span> <span class="hl str">'Slovencina'</span><span class="hl opt">,</span> <span class="hl str">'sk_SK'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'sl'</span> <span class="hl opt">=> [</span> <span class="hl str">'Slovenian'</span><span class="hl opt">,</span> <span class="hl str">'Slovenscina'</span><span class="hl opt">,</span> <span class="hl str">'sl_SI'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-2'</span> <span class="hl opt">],</span> <span class="hl str">'sq'</span> <span class="hl opt">=> [</span> <span class="hl str">'Albanian'</span><span class="hl opt">,</span> <span class="hl str">'Shqip'</span><span class="hl opt">,</span> <span class="hl str">'sq_AL'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'sr'</span> <span class="hl opt">=> [</span> <span class="hl str">'Serbian Cyrillic'</span><span class="hl opt">,</span> <span class="hl str">'Srpska'</span><span class="hl opt">,</span> <span class="hl str">'sr_CS'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr1'</span><span class="hl opt">,</span> <span class="hl str">'sp:sr'</span> <span class="hl opt">],</span> <span class="hl str">'sr</span><span class="hl ipl">@Latn</span><span class="hl str">'</span> <span class="hl opt">=> [</span> <span class="hl str">'Serbian Latin'</span><span class="hl opt">,</span> <span class="hl str">'Srpska'</span><span class="hl opt">,</span> <span class="hl str">'sr_CS'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span><span class="hl opt">,</span> <span class="hl str">'sh:sr</span><span class="hl ipl">@Latn</span><span class="hl str">'</span> <span class="hl opt">],</span> <span class="hl slc">#- ss_ZA not yet done, using en_ZA locale instead</span> <span class="hl str">'ss'</span> <span class="hl opt">=> [</span> <span class="hl str">'Swati'</span><span class="hl opt">,</span> <span class="hl str">'SiSwati'</span><span class="hl opt">,</span> <span class="hl str">'en_ZA'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'ss:en_ZA'</span> <span class="hl opt">],</span> <span class="hl str">'st'</span> <span class="hl opt">=> [</span> <span class="hl str">'Sotho'</span><span class="hl opt">,</span> <span class="hl str">'Sesotho'</span><span class="hl opt">,</span> <span class="hl str">'st_ZA'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'st:nso:en_ZA'</span> <span class="hl opt">],</span> <span class="hl str">'sv'</span> <span class="hl opt">=> [</span> <span class="hl str">'Swedish'</span><span class="hl opt">,</span> <span class="hl str">'Svenska'</span><span class="hl opt">,</span> <span class="hl str">'sv_SE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span> <span class="hl opt">],</span> <span class="hl str">'ta'</span> <span class="hl opt">=> [</span> <span class="hl str">'Tamil'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Tamil'</span><span class="hl opt">,</span> <span class="hl str">'ta_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_ta'</span> <span class="hl opt">],</span> <span class="hl str">'te'</span> <span class="hl opt">=> [</span> <span class="hl str">'Telugu'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Telugu'</span><span class="hl opt">,</span> <span class="hl str">'te_IN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'unicode'</span> <span class="hl opt">],</span> <span class="hl str">'tg'</span> <span class="hl opt">=> [</span> <span class="hl str">'Tajik'</span><span class="hl opt">,</span> <span class="hl str">'Tojiki'</span><span class="hl opt">,</span> <span class="hl str">'tg_TJ'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr2'</span> <span class="hl opt">],</span> <span class="hl str">'th'</span> <span class="hl opt">=> [</span> <span class="hl str">'Thai'</span><span class="hl opt">,</span> <span class="hl str">'ZZ Thai'</span><span class="hl opt">,</span> <span class="hl str">'th_TH'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'tis620'</span> <span class="hl opt">],</span> <span class="hl slc">#-'tk' => [ 'Turkmen', 'Turkmence', 'tk_TM', ' 2 ', 'utf8' ],</span> <span class="hl str">'tr'</span> <span class="hl opt">=> [</span> <span class="hl str">'Turkish'</span><span class="hl opt">,</span> <span class="hl str">'Turkce'</span><span class="hl opt">,</span> <span class="hl str">'tr_TR'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-9'</span> <span class="hl opt">],</span> <span class="hl slc">#-'tt' => [ 'Tatar', 'Tatarca', 'tt_RU', ' 2 ', 'utf8' ],</span> <span class="hl str">'uk'</span> <span class="hl opt">=> [</span> <span class="hl str">'Ukrainian'</span><span class="hl opt">,</span> <span class="hl str">'Ukrayinska'</span><span class="hl opt">,</span> <span class="hl str">'uk_UA'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'koi8-u'</span> <span class="hl opt">],</span> <span class="hl slc">#-'ur' => [ 'Urdu', 'AA Urdu', 'ur_PK', ' 2 ', 'utf_ar' ], </span> <span class="hl str">'uz</span><span class="hl ipl">@Latn</span><span class="hl str">'</span> <span class="hl opt">=> [</span> <span class="hl str">'Uzbek (latin)'</span><span class="hl opt">,</span> <span class="hl str">'Ozbekcha'</span><span class="hl opt">,</span> <span class="hl str">'uz_UZ'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr2'</span><span class="hl opt">,</span> <span class="hl str">'uz</span><span class="hl ipl">@Latn</span><span class="hl str">:uz'</span> <span class="hl opt">],</span> <span class="hl str">'uz'</span> <span class="hl opt">=> [</span> <span class="hl str">'Uzbek (cyrillic)'</span><span class="hl opt">,</span> <span class="hl str">'Ozbekcha'</span><span class="hl opt">,</span> <span class="hl str">'uz_UZ'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_cyr2'</span><span class="hl opt">,</span> <span class="hl str">'uz</span><span class="hl ipl">@Cyrl</span><span class="hl str">:uz'</span> <span class="hl opt">],</span> <span class="hl slc">#- ve_ZA not yet done, using en_ZA locale instead</span> <span class="hl str">'ve'</span> <span class="hl opt">=> [</span> <span class="hl str">'Venda'</span><span class="hl opt">,</span> <span class="hl str">'Venda'</span><span class="hl opt">,</span> <span class="hl str">'en_ZA'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'ve:ven:en_ZA'</span> <span class="hl opt">],</span> <span class="hl str">'vi'</span> <span class="hl opt">=> [</span> <span class="hl str">'Vietnamese'</span><span class="hl opt">,</span> <span class="hl str">'Tieng Viet'</span><span class="hl opt">,</span> <span class="hl str">'vi_VN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'utf_vi'</span> <span class="hl opt">],</span> <span class="hl str">'wa'</span> <span class="hl opt">=> [</span> <span class="hl str">'Walon'</span><span class="hl opt">,</span> <span class="hl str">'Walon'</span><span class="hl opt">,</span> <span class="hl str">'wa_BE'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-15'</span><span class="hl opt">,</span> <span class="hl str">'wa:fr_BE:fr'</span> <span class="hl opt">],</span> <span class="hl slc">#- locale not done yet</span> <span class="hl slc">#'wen' => [ 'Sorbian', 'XX Sorbian', 'wen_XX', '1 ', 'iso-8859-1' ],</span> <span class="hl str">'xh'</span> <span class="hl opt">=> [</span> <span class="hl str">'Xhosa'</span><span class="hl opt">,</span> <span class="hl str">'IsiXhosa'</span><span class="hl opt">,</span> <span class="hl str">'xh_ZA'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'xh:en_ZA'</span> <span class="hl opt">],</span> <span class="hl str">'yi'</span> <span class="hl opt">=> [</span> <span class="hl str">'Yiddish'</span><span class="hl opt">,</span> <span class="hl str">'AA Yidish'</span><span class="hl opt">,</span> <span class="hl str">'yi_US'</span><span class="hl opt">,</span> <span class="hl str">'1 '</span><span class="hl opt">,</span> <span class="hl str">'utf_he'</span> <span class="hl opt">],</span> <span class="hl str">'zh_CN'</span> <span class="hl opt">=> [</span> <span class="hl str">'Chinese Simplified'</span><span class="hl opt">,</span> <span class="hl str">'ZZ ZhongWen'</span><span class="hl opt">,</span> <span class="hl str">'zh_CN'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'gb2312'</span><span class="hl opt">,</span> <span class="hl str">'zh_CN.GB2312:zh_CN:zh'</span> <span class="hl opt">],</span> <span class="hl str">'zh_TW'</span> <span class="hl opt">=> [</span> <span class="hl str">'Chinese Traditional'</span><span class="hl opt">,</span> <span class="hl str">'ZZ ZhongWen'</span><span class="hl opt">,</span> <span class="hl str">'zh_TW'</span><span class="hl opt">,</span> <span class="hl str">' 2 '</span><span class="hl opt">,</span> <span class="hl str">'Big5'</span><span class="hl opt">,</span> <span class="hl str">'zh_TW.Big5:zh_TW:zh_HK:zh'</span> <span class="hl opt">],</span> <span class="hl str">'zu'</span> <span class="hl opt">=> [</span> <span class="hl str">'Zulu'</span><span class="hl opt">,</span> <span class="hl str">'IsiZulu'</span><span class="hl opt">,</span> <span class="hl str">'zu_ZA'</span><span class="hl opt">,</span> <span class="hl str">' 3 '</span><span class="hl opt">,</span> <span class="hl str">'iso-8859-1'</span><span class="hl opt">,</span> <span class="hl str">'xh:en_ZA'</span> <span class="hl opt">],</span> <span class="hl opt">);</span> <span class="hl kwa">sub</span> l2name <span class="hl opt">{</span> <span class="hl kwc">exists</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} &&</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">0</span><span class="hl opt">] }</span> <span class="hl kwa">sub</span> l2transliterated <span class="hl opt">{</span> <span class="hl kwc">exists</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} &&</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">1</span><span class="hl opt">] }</span> <span class="hl kwa">sub</span> l2locale <span class="hl opt">{</span> <span class="hl kwc">exists</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} &&</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">2</span><span class="hl opt">] }</span> <span class="hl kwa">sub</span> l2location <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl kwb">%geo</span> <span class="hl opt">= (</span><span class="hl num">1</span> <span class="hl opt">=></span> <span class="hl str">'Europe'</span><span class="hl opt">,</span> <span class="hl num">2</span> <span class="hl opt">=></span> <span class="hl str">'Asia'</span><span class="hl opt">,</span> <span class="hl num">3</span> <span class="hl opt">=></span> <span class="hl str">'Africa'</span><span class="hl opt">,</span> <span class="hl num">4</span> <span class="hl opt">=></span> <span class="hl str">'Oceania/Pacific'</span><span class="hl opt">,</span> <span class="hl num">5</span> <span class="hl opt">=></span> <span class="hl str">'America'</span><span class="hl opt">);</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> if_<span class="hl opt">(</span><span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">3</span><span class="hl opt">] =~</span> <span class="hl kwb">$_, $geo</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">}) }</span> <span class="hl num">1</span><span class="hl opt">.</span><span class="hl num">.5</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> l2charset <span class="hl opt">{</span> <span class="hl kwc">exists</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} &&</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">4</span><span class="hl opt">] }</span> <span class="hl kwa">sub</span> l2language <span class="hl opt">{</span> <span class="hl kwc">exists</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]} &&</span> <span class="hl kwb">$langs</span><span class="hl opt">{</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]}[</span><span class="hl num">5</span><span class="hl opt">] }</span> <span class="hl kwa">sub</span> list_langs <span class="hl opt">{</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">%options</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@l</span> <span class="hl opt">=</span> <span class="hl kwc">keys</span> <span class="hl kwb">%langs</span><span class="hl opt">;</span> <span class="hl kwb">$options</span><span class="hl opt">{</span>exclude_non_installed<span class="hl opt">}</span> ? <span class="hl kwc">grep</span> <span class="hl opt">{ -</span>e <span class="hl str">"/usr/share/locale/"</span><span class="hl opt">.</span>l2locale<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">).</span><span class="hl str">"/LC_CTYPE"</span> <span class="hl opt">}</span> <span class="hl kwb">@l</span> <span class="hl opt">:</span> <span class="hl kwb">@l</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> text_direction_rtl<span class="hl opt">() {</span> N<span class="hl opt">(</span><span class="hl str">"default:LTR"</span><span class="hl opt">)</span> <span class="hl kwc">eq</span> <span class="hl str">"default:RTL"</span> <span class="hl opt">}</span> <span class="hl slc">#- key: country name (that should be YY in xx_YY locale)</span> <span class="hl slc">#- [0]: country name in natural language</span> <span class="hl slc">#- [1]: default locale for that country </span> <span class="hl slc">#- [2]: geographic groups that this country belongs to (for displaying</span> <span class="hl slc">#- in the menu grouped in smaller lists), 1=Europe, 2=Asia, 3=Africa,</span> <span class="hl slc">#- 4=Oceania&Pacific, 5=America (if you wonder, it's the order</span> <span class="hl slc">#- used in the olympic flag)</span> <span class="hl slc">#-</span> <span class="hl slc">#- Note: for countries for which a glibc locale don't exist (yet) I tried to</span> <span class="hl slc">#- put a locale that makes sense; and a '#' at the end of the line to show</span> <span class="hl slc">#- the locale is not the "correct" one. 'en_US' is used when no good choice</span> <span class="hl slc">#- is available.</span> <span class="hl kwc">my</span> <span class="hl kwb">%countries</span> <span class="hl opt">= (</span> <span class="hl str">'AF'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Afghanistan"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AD'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Andorra"</span><span class="hl opt">),</span> <span class="hl str">'ca_ES'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"United Arab Emirates"</span><span class="hl opt">),</span> <span class="hl str">'ar_AE'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'AG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Antigua and Barbuda"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Anguilla"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Albania"</span><span class="hl opt">),</span> <span class="hl str">'sq_AL'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'AM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Armenia"</span><span class="hl opt">),</span> <span class="hl str">'hy_AM'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'AN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Netherlands Antilles"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Angola"</span><span class="hl opt">),</span> <span class="hl str">'pt_PT'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AQ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Antarctica"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Argentina"</span><span class="hl opt">),</span> <span class="hl str">'es_AR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'AS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"American Samoa"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Austria"</span><span class="hl opt">),</span> <span class="hl str">'de_AT'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'AU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Australia"</span><span class="hl opt">),</span> <span class="hl str">'en_AU'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl str">'AW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Aruba"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'AZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Azerbaijan"</span><span class="hl opt">),</span> <span class="hl str">'az_AZ'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'BA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bosnia and Herzegovina"</span><span class="hl opt">),</span> <span class="hl str">'bs_BA'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'BB'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Barbados"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BD'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bangladesh"</span><span class="hl opt">),</span> <span class="hl str">'bn_BD'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'BE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Belgium"</span><span class="hl opt">),</span> <span class="hl str">'fr_BE'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'BF'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Burkina Faso"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bulgaria"</span><span class="hl opt">),</span> <span class="hl str">'bg_BG'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'BH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bahrain"</span><span class="hl opt">),</span> <span class="hl str">'ar_BH'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'BI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Burundi"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BJ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Benin"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bermuda"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Brunei Darussalam"</span><span class="hl opt">),</span> <span class="hl str">'ar_EG'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bolivia"</span><span class="hl opt">),</span> <span class="hl str">'es_BO'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'BR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Brazil"</span><span class="hl opt">),</span> <span class="hl str">'pt_BR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'BS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bahamas"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bhutan"</span><span class="hl opt">),</span> <span class="hl str">'en_IN'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BV'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Bouvet Island"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'BW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Botswana"</span><span class="hl opt">),</span> <span class="hl str">'en_BW'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'BY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Belarus"</span><span class="hl opt">),</span> <span class="hl str">'be_BY'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'BZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Belize"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Canada"</span><span class="hl opt">),</span> <span class="hl str">'en_CA'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'CC'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cocos (Keeling) Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CD'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Congo (Kinshasa)"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CF'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Central African Republic"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Congo (Brazzaville)"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Switzerland"</span><span class="hl opt">),</span> <span class="hl str">'de_CH'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'CI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cote d'Ivoire"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cook Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Chile"</span><span class="hl opt">),</span> <span class="hl str">'es_CL'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'CM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cameroon"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"China"</span><span class="hl opt">),</span> <span class="hl str">'zh_CN'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'CO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Colombia"</span><span class="hl opt">),</span> <span class="hl str">'es_CO'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'CR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Costa Rica"</span><span class="hl opt">),</span> <span class="hl str">'es_CR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'CU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cuba"</span><span class="hl opt">),</span> <span class="hl str">'es_DO'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CV'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cape Verde"</span><span class="hl opt">),</span> <span class="hl str">'pt_PT'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CX'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Christmas Island"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cyprus"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'CZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Czech Republic"</span><span class="hl opt">),</span> <span class="hl str">'cs_CZ'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'DE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Germany"</span><span class="hl opt">),</span> <span class="hl str">'de_DE'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'DJ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Djibouti"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'DK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Denmark"</span><span class="hl opt">),</span> <span class="hl str">'da_DK'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'DM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Dominica"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'DO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Dominican Republic"</span><span class="hl opt">),</span> <span class="hl str">'es_DO'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'DZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Algeria"</span><span class="hl opt">),</span> <span class="hl str">'ar_DZ'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'EC'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Ecuador"</span><span class="hl opt">),</span> <span class="hl str">'es_EC'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'EE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Estonia"</span><span class="hl opt">),</span> <span class="hl str">'et_EE'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'EG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Egypt"</span><span class="hl opt">),</span> <span class="hl str">'ar_EG'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'EH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Western Sahara"</span><span class="hl opt">),</span> <span class="hl str">'ar_MA'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'ER'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Eritrea"</span><span class="hl opt">),</span> <span class="hl str">'ti_ER'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'ES'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Spain"</span><span class="hl opt">),</span> <span class="hl str">'es_ES'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'ET'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Ethiopia"</span><span class="hl opt">),</span> <span class="hl str">'am_ET'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'FI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Finland"</span><span class="hl opt">),</span> <span class="hl str">'fi_FI'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'FJ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Fiji"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'FK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Falkland Islands (Malvinas)"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'FM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Micronesia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'FO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Faroe Islands"</span><span class="hl opt">),</span> <span class="hl str">'fo_FO'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'FR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"France"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'GA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Gabon"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GB'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"United Kingdom"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'GD'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Grenada"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Georgia"</span><span class="hl opt">),</span> <span class="hl str">'ka_GE'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'GF'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"French Guiana"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Ghana"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Gibraltar"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Greenland"</span><span class="hl opt">),</span> <span class="hl str">'kl_GL'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'GM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Gambia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Guinea"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GP'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Guadeloupe"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GQ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Equatorial Guinea"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Greece"</span><span class="hl opt">),</span> <span class="hl str">'el_GR'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'GS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"South Georgia and the South Sandwich Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Guatemala"</span><span class="hl opt">),</span> <span class="hl str">'es_GT'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'GU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Guam"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Guinea-Bissau"</span><span class="hl opt">),</span> <span class="hl str">'pt_PT'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'GY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Guyana"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'HK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"China (Hong Kong)"</span><span class="hl opt">),</span> <span class="hl str">'zh_HK'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'HM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Heard and McDonald Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'HN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Honduras"</span><span class="hl opt">),</span> <span class="hl str">'es_HN'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'HR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Croatia"</span><span class="hl opt">),</span> <span class="hl str">'hr_HR'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'HT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Haiti"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'HU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Hungary"</span><span class="hl opt">),</span> <span class="hl str">'hu_HU'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'ID'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Indonesia"</span><span class="hl opt">),</span> <span class="hl str">'id_ID'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'IE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Ireland"</span><span class="hl opt">),</span> <span class="hl str">'en_IE'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'IL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Israel"</span><span class="hl opt">),</span> <span class="hl str">'he_IL'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'IN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"India"</span><span class="hl opt">),</span> <span class="hl str">'hi_IN'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'IO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"British Indian Ocean Territory"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'IQ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Iraq"</span><span class="hl opt">),</span> <span class="hl str">'ar_IQ'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'IR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Iran"</span><span class="hl opt">),</span> <span class="hl str">'fa_IR'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'IS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Iceland"</span><span class="hl opt">),</span> <span class="hl str">'is_IS'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'IT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Italy"</span><span class="hl opt">),</span> <span class="hl str">'it_IT'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'JM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Jamaica"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'JO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Jordan"</span><span class="hl opt">),</span> <span class="hl str">'ar_JO'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'JP'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Japan"</span><span class="hl opt">),</span> <span class="hl str">'ja_JP'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'KE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Kenya"</span><span class="hl opt">),</span> <span class="hl str">'en_ZW'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Kyrgyzstan"</span><span class="hl opt">),</span> <span class="hl str">'ky_KG'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cambodia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc"># km_KH not released yet</span> <span class="hl str">'KI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Kiribati"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Comoros"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Saint Kitts and Nevis"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KP'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Korea (North)"</span><span class="hl opt">),</span> <span class="hl str">'ko_KR'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Korea"</span><span class="hl opt">),</span> <span class="hl str">'ko_KR'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'KW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Kuwait"</span><span class="hl opt">),</span> <span class="hl str">'ar_KW'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'KY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Cayman Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'KZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Kazakhstan"</span><span class="hl opt">),</span> <span class="hl str">'ru_RU'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'LA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Laos"</span><span class="hl opt">),</span> <span class="hl str">'lo_LA'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'LB'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Lebanon"</span><span class="hl opt">),</span> <span class="hl str">'ar_LB'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'LC'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Saint Lucia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'LI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Liechtenstein"</span><span class="hl opt">),</span> <span class="hl str">'de_CH'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'LK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Sri Lanka"</span><span class="hl opt">),</span> <span class="hl str">'en_IN'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'LR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Liberia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'LS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Lesotho"</span><span class="hl opt">),</span> <span class="hl str">'en_BW'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'LT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Lithuania"</span><span class="hl opt">),</span> <span class="hl str">'lt_LT'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'LU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Luxembourg"</span><span class="hl opt">),</span> <span class="hl str">'de_LU'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'LV'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Latvia"</span><span class="hl opt">),</span> <span class="hl str">'lv_LV'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'LY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Libya"</span><span class="hl opt">),</span> <span class="hl str">'ar_LY'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'MA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Morocco"</span><span class="hl opt">),</span> <span class="hl str">'ar_MA'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl str">'MC'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Monaco"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MD'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Moldova"</span><span class="hl opt">),</span> <span class="hl str">'ro_RO'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Madagascar"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Marshall Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Macedonia"</span><span class="hl opt">),</span> <span class="hl str">'mk_MK'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'ML'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Mali"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Myanmar"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Mongolia"</span><span class="hl opt">),</span> <span class="hl str">'mn_MN'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'MP'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Northern Mariana Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MQ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Martinique"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Mauritania"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Montserrat"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Malta"</span><span class="hl opt">),</span> <span class="hl str">'mt_MT'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'MU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Mauritius"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MV'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Maldives"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Malawi"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'MX'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Mexico"</span><span class="hl opt">),</span> <span class="hl str">'es_MX'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'MY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Malaysia"</span><span class="hl opt">),</span> <span class="hl str">'ms_MY'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'MZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Mozambique"</span><span class="hl opt">),</span> <span class="hl str">'pt_PT'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Namibia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NC'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"New Caledonia"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Niger"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NF'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Norfolk Island"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Nigeria"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Nicaragua"</span><span class="hl opt">),</span> <span class="hl str">'es_NI'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'NL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Netherlands"</span><span class="hl opt">),</span> <span class="hl str">'nl_NL'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'NO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Norway"</span><span class="hl opt">),</span> <span class="hl str">'nb_NO'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'NP'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Nepal"</span><span class="hl opt">),</span> <span class="hl str">'ne_NP'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'NR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Nauru"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Niue"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'NZ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"New Zealand"</span><span class="hl opt">),</span> <span class="hl str">'en_NZ'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl str">'OM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Oman"</span><span class="hl opt">),</span> <span class="hl str">'ar_OM'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'PA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Panama"</span><span class="hl opt">),</span> <span class="hl str">'es_PA'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'PE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Peru"</span><span class="hl opt">),</span> <span class="hl str">'es_PE'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'PF'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"French Polynesia"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'PG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Papua New Guinea"</span><span class="hl opt">),</span> <span class="hl str">'en_NZ'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'PH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Philippines"</span><span class="hl opt">),</span> <span class="hl str">'ph_PH'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'PK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Pakistan"</span><span class="hl opt">),</span> <span class="hl str">'ur_PK'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'PL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Poland"</span><span class="hl opt">),</span> <span class="hl str">'pl_PL'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'PM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Saint Pierre and Miquelon"</span><span class="hl opt">),</span> <span class="hl str">'fr_CA'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'PN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Pitcairn"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'PR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Puerto Rico"</span><span class="hl opt">),</span> <span class="hl str">'es_PR'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'PS'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Palestine"</span><span class="hl opt">),</span> <span class="hl str">'ar_JO'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'PT'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Portugal"</span><span class="hl opt">),</span> <span class="hl str">'pt_PT'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'PY'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Paraguay"</span><span class="hl opt">),</span> <span class="hl str">'es_PY'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'PW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Palau"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'QA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Qatar"</span><span class="hl opt">),</span> <span class="hl str">'ar_QA'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'RE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Reunion"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'RO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Romania"</span><span class="hl opt">),</span> <span class="hl str">'ro_RO'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'RU'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Russia"</span><span class="hl opt">),</span> <span class="hl str">'ru_RU'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'RW'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Rwanda"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SA'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Saudi Arabia"</span><span class="hl opt">),</span> <span class="hl str">'ar_SA'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'SB'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Solomon Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SC'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Seychelles"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'4'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SD'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Sudan"</span><span class="hl opt">),</span> <span class="hl str">'ar_SD'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl str">'SE'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Sweden"</span><span class="hl opt">),</span> <span class="hl str">'sv_SE'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'SG'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Singapore"</span><span class="hl opt">),</span> <span class="hl str">'en_SG'</span><span class="hl opt">,</span> <span class="hl str">'2'</span> <span class="hl opt">],</span> <span class="hl str">'SH'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Saint Helena"</span><span class="hl opt">),</span> <span class="hl str">'en_GB'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SI'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Slovenia"</span><span class="hl opt">),</span> <span class="hl str">'sl_SI'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'SJ'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Svalbard and Jan Mayen Islands"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SK'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Slovakia"</span><span class="hl opt">),</span> <span class="hl str">'sk_SK'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl str">'SL'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Sierra Leone"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SM'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"San Marino"</span><span class="hl opt">),</span> <span class="hl str">'it_IT'</span><span class="hl opt">,</span> <span class="hl str">'1'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SN'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Senegal"</span><span class="hl opt">),</span> <span class="hl str">'fr_FR'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SO'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Somalia"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'3'</span> <span class="hl opt">],</span> <span class="hl slc"># so_SO</span> <span class="hl str">'SR'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Suriname"</span><span class="hl opt">),</span> <span class="hl str">'nl_NL'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'ST'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"Sao Tome and Principe"</span><span class="hl opt">),</span> <span class="hl str">'en_US'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],</span> <span class="hl slc">#</span> <span class="hl str">'SV'</span> <span class="hl opt">=> [</span> N_<span class="hl opt">(</span><span class="hl str">"El Salvador"</span><span class="hl opt">),</span> <span class="hl str">'es_SV'</span><span class="hl opt">,</span> <span class="hl str">'5'</span> <span class="hl opt">],