From: Kirrily R. <sk...@us...> - 2002-01-29 20:47:30
|
Update of /cvsroot/formmagick/formmagick/lib/CGI/FormMagick In directory usw-pr-cvs1:/tmp/cvs-serv32309/lib/CGI/FormMagick Modified Files: L10N.pm Setup.pm Log Message: Localisation seems to be working. Index: L10N.pm =================================================================== RCS file: /cvsroot/formmagick/formmagick/lib/CGI/FormMagick/L10N.pm,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -r1.18 -r1.19 *** L10N.pm 2002/01/29 19:37:28 1.18 --- L10N.pm 2002/01/29 20:47:27 1.19 *************** *** 90,96 **** } ! my $fm = CGI::FormMagick->new(TYPE => 'FILE', SOURCE => "t/simple.xml"); is($fm->localise("yes"), "oui", "Simple localisation"); is($fm->localise("xyz"), "xyz", "Attempted localisation of untranslated string"); is($fm->localise(""), "", "Fail gracefully on localisation of empty string"); --- 90,98 ---- } ! $ENV{HTTP_ACCEPT_LANGUAGE} = 'fr, en, de'; ! my $fm = CGI::FormMagick->new(TYPE => 'FILE', SOURCE => "t/lexicon.xml"); is($fm->localise("yes"), "oui", "Simple localisation"); + is($fm->localise("Hello"), "Bonjour", "Simple localisation"); is($fm->localise("xyz"), "xyz", "Attempted localisation of untranslated string"); is($fm->localise(""), "", "Fail gracefully on localisation of empty string"); *************** *** 103,108 **** my $fm = shift; my $string = shift || ""; ! #($string) = ($string =~ /(.*)/s); ! return $string; } --- 105,114 ---- my $fm = shift; my $string = shift || ""; ! warn "Localising this string: $string\n"; ! if (my $trans = $fm->{lexicon}->{$string}) { ! return $trans; ! } else { ! return $string; ! } } *************** *** 127,134 **** } } ! sub get_language { ! return "en"; } =head1 SEE ALSO --- 133,202 ---- } } + + =head2 get_lexicon() + + Attempts to find a suitable localisation lexicon for use, and returns it + as a hash. + + =cut + + sub get_lexicon { + shift; + my (@lexicons) = @_; + my @preferred_languages = get_languages(); + + my %lexicons; + foreach my $lex (@lexicons) { + $lexlang = $lex->[0]->{LANG}; + $lexicons{$lexlang} = $lex; + } ! my %thislex = (); ! PL: foreach my $pl (@preferred_languages) { ! if ($lexicons{$pl}) { ! %thislex = clean_lexicon($lexicons{$pl}); ! last PL; ! } ! } ! return %thislex; } + + =head2 clean_lexicon($lexhashref) + + Given a messy lexicon hashref, clean it up into a nice neat hash of + base/translation pairs. + + =cut + + sub clean_lexicon { + my $dirty = shift; + my @entries = CGI::FormMagick::clean_xml_array(@$dirty); + my %return_lexicon; + foreach my $e (@entries) { + #$return_lexicon{$e->{content}->{BASE}} = $e->{content}->{TRANS}; + $base = $e->{content}->[4]->[2]; + $trans = $e->{content}->[8]->[2]; + if ($base && $trans) { + $return_lexicon{$base} = $trans; + } + } + return %return_lexicon; + } + + =head2 get_languages() + + Picks up the preferred language(s) from $ENV{HTTP_ACCEPT_LANGUAGE} + + =for testing + $ENV{HTTP_ACCEPT_LANGUAGE} = "fr, de, en"; + my @langs = CGI::FormMagick::L10N::get_languages(); + is($langs[1], "de", "pick up list of languages"); + + =cut + + sub get_languages { + return split ", ", $ENV{HTTP_ACCEPT_LANGUAGE}; + } + =head1 SEE ALSO Index: Setup.pm =================================================================== RCS file: /cvsroot/formmagick/formmagick/lib/CGI/FormMagick/Setup.pm,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -r1.13 -r1.14 *** Setup.pm 2002/01/29 19:29:00 1.13 --- Setup.pm 2002/01/29 20:47:27 1.14 *************** *** 141,151 **** my @form_elements = $self->clean_xml_array(@dirty_form[1..$#dirty_form]); ! my @pages = $self->clean_page_list(\@form_elements, \%form_attributes); $self->{xml} = { %form_attributes, ! PAGES => \@pages, }; } --- 141,154 ---- my @form_elements = $self->clean_xml_array(@dirty_form[1..$#dirty_form]); ! my ($pages, $lexicon) = ! $self->clean_page_list(\@form_elements, \%form_attributes); $self->{xml} = { %form_attributes, ! PAGES => $pages, }; + $self->{lexicon} = $lexicon; + } *************** *** 192,197 **** Given a messy list of form elements (as seen as @form_elements in ! parse_xml()), removes extraneous data and returns a clean list of pages ! in the form. =cut --- 195,200 ---- Given a messy list of form elements (as seen as @form_elements in ! parse_xml()), removes extraneous data and returns: 1) a ! clean list of pages in the form, and 2) a lexicon hash. =cut *************** *** 202,205 **** --- 205,209 ---- my %form_attributes = %{$_[2]}; my @form_pages; + my @lexicons; FORM_ELEMENT: foreach my $form_element (@form_elements) { if (not $form_element->{type}) { *************** *** 207,210 **** --- 211,216 ---- } elsif ($form_element->{type} eq 'PAGE') { push @form_pages, $form_element->{content}; + } elsif ($form_element->{type} eq 'LEXICON') { + push @lexicons, $form_element->{content}; } elsif ($form_element->{type}) { $form_attributes{$form_element->{type}} = *************** *** 245,250 **** push @pages, { %page_attributes, FIELDS => \@fields }; } - return @pages; } --- 251,258 ---- push @pages, { %page_attributes, FIELDS => \@fields }; } + my %lexicon = CGI::FormMagick::L10N->get_lexicon(@lexicons); + + return \@pages, \%lexicon; } |