!

Dette materialet blir ikke lenger vedlikeholdt. Du vil finne oppdatert materiale på siden: http://borres.hiof.no/wep/

AJAX
CSS
Google
Børre Stenseth
Eksempler >Picasso

Picasso

Hva
picasso
Tekst tilgjengelig i flere språk

Vi skal ta for oss en enkel side med et bilde og en kort historie om Picasso. Vi ønsker å framstille historien, teksten, på forskjellige språk. Brukeren skal enkelt kunne velge språk. Problemet blir løst på tre forskjellige måter:

  1. Programmering av stilsett. Alle tekstene lastes opp. Brukerens valg fører til at vi endrer aktivt stilsett (CSS) for å vise den ønskede teksten.
  2. Programmering av stilegenskap. Alle tekstene lastes opp. Brukerens valg fører til at vi endrer display-egenskapene i den aktuelle CSS-regelen.
  3. Skjulte felter (div'er). Alt lastes opp. Brukerens valg fører til at vi henter fram den ønskede skjulte tekstblokken.
  4. AJAX. Vi henter den ønskede teksten fra tjeneren etter behov.
  5. Google translate. Vi oversetter teksten dynamisk

Oversettelsene, untatt i det siste tilfellet, er gjort fra fransk i Alta Vistas Babel Fish og er vel heller tvilsomme som språklige perler. Det er laget oversettelser fra fransk til engelsk, spansk, italiensk og tysk.

Programmerte stilsett

Strategien er at vi lager et stilsett for hver av de aktuelle språkene. Når brukeren velger forsøker vi å aktivisere det aktuelle stilsettet. Stilsettene har inegn annen funksjon enn å skjule alle andre tekster enn den vi vil vise fram

Stilsettet som viser fram engelsk tekst er slik:

.rightimage{float:right; margin: 0 0 10px 10px;padding:2px;}
.english{display:visible;}
.german,.spanish,.italian{display:none}
	

Det som viser fram tysk er slik:

.rightimage{float:right; margin: 0 0 10px 10px;padding:2px;}
.german{display:visible;}
.english,.spanish,.italian{display:none}
	

Tilsvarende for fransk, italiensk og spansk.

De 5 stilsettene lenkes til i headeren på siden slik:

  <link rel="stylesheet" href="styleFrench.css">
  <link rel="stylesheet" href="styleEnglish.css">
  <link rel="stylesheet" href="styleGerman.css">
  <link rel="stylesheet" href="styleSpansish.css">
  <link rel="stylesheet" href="styleItalian.css">
	

Utfordringen blir da å skrive en Javascript-funksjon som aktiviserer det riktige stilsettet:

   function chooseStyle(theChoice){
    if(document.styleSheets)
      for (i=0;i<document.styleSheets.length;i++)
         if (i==theChoice)
          document.styleSheets[i].disabled=false;
         else
          document.styleSheets[i].disabled=true;
  }

Hvordan vi kaller denne funksjonen avhenger av hvordan vi lager layout på siden. På eksempelt du kan teste er det enkle stringer som kan klikkes.

Du kan teste løsningen her http://www.it.hiof.no/~borres/dw/picasso/picasso_with_style.html

Programmerte stilegenskaper

Vi legger ut alle tekstene og merker dem med:

<div class="french-lang">
<div class="english-lang">
..osv

Vi lage et enkelt stilsett:

.french-lang{display:block}
.english-lang{display:none}
.german-lang{display:none}
.spanish-lang{display:none}
.italian-lang{display:none}
.rightimage{float:right}

Når brukeren velger et språk kjøre følgende javascript:

function setStyle(theChoice){
  // assume only one stylesheet
  var myrules=document.styleSheets[0].cssRules;
    for(i=0; i < myrules.length; i++)
      if(myrules[i].selectorText.indexOf('lang')!=-1)
      {
          myrules[i].style['display']='none';
          if(myrules[i].selectorText.indexOf('.'+theChoice)!=-1)
              myrules[i].style['display']='block';		
      }
}
  
Du kan teste løsningen her http://www.it.hiof.no/~borres/dw/picasso/picasso_with_class.html

Skjulte felt

Strategien her er også å laste opp all teksten med en gang og skjule det vi ikke ønsker å se. Men her flytter vi den ønskede skjulte teksten til et element der den blir synlig. Prinsippielt blir det slik:

...
  <div>
    <img class="rightimage" src="Le-fauteuil-rouge.gif" alt="Le-fauteuil-rouge"/>
    <div id="show">
    </div>
  </div>

  <div style="display:none">
	  <div id="french">
	    Picasso poursuit ...
	  </div>
	  <div id="english">
	    Picasso continues ...
	  </div>
	  ...
  </div>

JavaScriptet som henter en skjult tekst til "show"-elementet ser slik ut:

  function showLanguage(languageID){
    T=document.getElementById(languageID).innerHTML;
    document.getElementById('show').innerHTML=T;

Du kan teste løsningen her http://www.it.hiof.no/~borres/dw/picasso/picasso_hidden.html

AJAX

Her er strategien å hente den teksten vi ønsker når det er behov for den. Vi henter de filene vi trenger direkte.

Javascriptkoden blir slik:

function fetchLanguage(language)
{
    // relies on jquery.js   
    $.ajax({
      url:language+".txt",
      success:function(data)
      {
        $('#show').text(data);
      },
      error:function(data)
      {
        $('#show').text('error');
      }
      });
 }
Du kan teste løsningen her http://www.it.hiof.no/~borres/dw/picasso/picasso_ajax.html

Google translate

Google har kommersialisert den tjenesten som tar en tekst og sender til bake oversettelsen. Jeg har derfor valgt å lage en løsning som oversetter hele siden, men med mulighte for å holde noen elementer uten for oversettelsen. Dette gjøres ved å gi de aktuelle elementene class skiptranslate eller notranslate.

Vi finner beskrivelse av oversettelsestjenesten i Google Translate API [1] .

Du kan teste løsningen her http://www.it.hiof.no/~borres/dw/picasso/picasso_translate.html
Referanser
  1. Google Translate API Google https://developers.google.com/translate/ 02-08-2012
  1. Babelfish altavista.com world.altavista.com/ 14-03-2010
Vedlikehold

Børre Stenseth, revidert oktober 2010

( Velkommen ) Eksempler >Picasso ( uefa )