# # Lang.pm # # $Id: Lang.pm,v 1.1.1.1 2001/05/24 15:57:41 sano Exp $ # # Language support. # # � Copyright 1997, Cees de Groot # package LinuxDocTools::Lang; use strict; use vars qw($VERSION @ISA @EXPORT @Languages $translations); require 5.0004; use Exporter; use LinuxDocTools::Vars; $VERSION = sprintf("%d.%02d", q$Revision: 1.1.1.1 $ =~ /(\d+)\.(\d+)/); @ISA = qw(Exporter); @EXPORT = qw(Any2ISO ISO2Native ISO2English Xlat); =head1 NAME LinuxDocTools::Lang - language name and translation functions =head1 SYNOPSIS $isoname = Any2ISO ('deutsch'); $native = ISO2Native ('de'); $engname = ISO2English ('nederlands'); $global->{language} = 'nl'; $dutch = Xlat ('Table of Contents'); =head1 DESCRIPTION B<LinuxDocTools::Lang> gives a simple interface to various forms of language names, and provides a translation service. Languages can be specified in three different ways: by their native name, by their english name, and by their 2-letter ISO code. For example, you can specify the German language as C<deutsch>, as C<german> or as C<de>. =head1 FUNCTIONS =over 4 =cut @Languages = qw( en english english de deutsch german nl nederlands dutch fr fran�ais french es espa�ol spanish da dansk danish no norsk norwegian se svenska swedish pt portuges portuguese ca catal� catalan it italiano italian ro rom�n� romanian ja japanese japanese pl polski polish ko korean korean fi suomi finnish ); =item Any2ISO Maps any of the three forms of languages to the ISO name. So either of these invocations: Any2ISO ('dutch'); Any2ISO ('nederlands'); Any2ISO ('nl'); will return the string C<"nl">. =cut sub Any2ISO { my $lang = shift (@_); my $i = 0; foreach my $l (@Languages) { ($l eq $lang) && last; $i++; } return $Languages[(int $i / 3) * 3]; } =item ISO2Native Maps the ISO code to the native name of the language. =cut sub ISO2Native { my $iso = shift (@_); my $i = 0; foreach my $l (@Languages) { ($l eq $iso) && last; $i++; } return $Languages[$i + 1]; } =item ISO2English Maps the ISO code to the english name of the language. =cut sub ISO2English { my $iso = shift (@_); my $i = 0; foreach my $l (@Languages) { ($l eq $iso) && last; $i++; } return $Languages[$i + 2]; } =item Xlat Translates its (English) argument to the language specified by the current value of C<$gobal-E<gt>{language}>. The module, in its source file, contains a data structure, indexed by the English strings, that has all available translations. =cut sub Xlat { my ($txt) = @_; return $txt if ($global->{language} eq "en"); return $translations->{$txt}{$global->{language}}; }; # # By the time this grows big, we'll make up something else. # $translations = { "Previous" => { "nl" => "Terug", "de" => "Zur�ck", "es" => "P�gina anterior", "fr" => "Page pr�c�dente", "da" => "Forrige", "no" => "Forrige", "se" => "F�reg�ende", "pt" => "P�gina anterior", "ca" => "P�gina anterior", "it" => "Indietro", "ro" => "�napoi", "ja" => "���Υڡ���", "pl" => "Poprzedni", "ko" => "����", "fi" => "Edellinen" }, "Next" => { "nl" => "Verder", "de" => "Weiter", "es" => "P�gina siguiente", "fr" => "Page suivante", "da" => "N�ste", "no" => "Neste", "se" => "N�sta", "pt" => "P�gina seguinte", "ca" => "P�gina seg�ent", "it" => "Avanti", "ro" => "�nainte", "ja" => "���Υڡ���", "pl" => "Nastny", "ko" => "����", "fi" => "Seuraava" }, "Contents" => { "nl" => "Inhoud", "de" => "Inhalt", "es" => "�ndice general", "fr" => "Table des mati�res", "da" => "Indhold", "no" => "Innhold", "se" => "Inneh�llsf�rteckning", "pt" => "�ndice", "ca" => "�ndex", "it" => "Indice", "ro" => "Cuprins", "ja" => "�ܼ���", "pl" => "Spis Trei", "ko" => "����", "fi" => "Sis�llys" }, "Table of Contents" => { "nl" => "Inhoudsopgave", "de" => "Inhaltsverzeichnis", "es" => "�ndice general", "fr" => "Table des mati�res", "da" => "Indholdsfortegnelse", "no" => "Innholdsfortegnelse", "se" => "Inneh�llsf�rteckning", "pt" => "�ndice geral", "ca" => "�ndex general", "it" => "Indice Generale", "ro" => "Cuprins", "ja" => "�ܼ�", "pl" => "Spis Trei", "ko" => "����", "fi" => "Sis�llysluettelo" } }; =back =head1 AUTHOR Cees de Groot, C<E<lt>cg@pobox.comE<gt>> =cut 1;