Gå til innhold

Hvordan få til en flerspråklig side?


Anbefalte innlegg

Videoannonse
Annonse
Gjest Slettet+1374861

Har "plundret" litt med det der selv... Det som fallt meg logisk var jo da å ha alle strenger som inneholder tekst på ett spesifikt språk til en egen fil for det språket.

 

F.eks. kan du jo ha en fil english.php med:

$welcome = "Hello user!";
$goodbye = "Bye user!";

 

Og en annen fil norwegian.php:

$welcome = "Hallo bruker!";
$goodbye = "Hade bruker!";

 

Også da require-e og bruke variablene fra den fila.

(Jeg har ikke jobbet så mye med PHP5 men sikkert lurt å gjøre variablene interne for det spesifikke språket, og så skjule dem med innkapsling)

Lenke til kommentar

En metode jeg synes er ganske grei, er denne:

Brukes vel noe lignende i bl.a. Drupal.

 

function t($text, $return = false)
{	

global $current_language;
	// Eventuelt isset($current_language[$text]), vet ikke helt hva som er raskest.
if (array_key_exists($text, $current_language))
{
	$translated = $current_language[$text];	
}
else
{
	$translated = $text;
}

if ($return)
{
	return $translated;
}

echo $translated;
}

 

Her er språkene lagret i en array, hvor den engelske teksten er nøkkelen, mens språket det skal oversettes til er verdien. Hvis nøkkelen ikke finnes, skriver den ut den engelske setningen.

 

Så kan den kjøres slik:

$current_language = array('Hello world!' => 'Hei verden!');

// Hei verden!
t('Hello World!');

$string = t('Hello World', true);

// Hei verden!
echo $string;

Endret av hans3k
Lenke til kommentar
Gjest Slettet+1374861

meget pen løsning hans3k!

helt klart bedre.

 

blir ofte så "abstrakt" hva som skjer hvis det ikke står NOE i filen der det skal skrives ut, men bare en referanse til en variabel, men her får du jo da sett den "orginale teksten", samtidig som det blir skrevet ut i rett språk.

Endret av Slettet+1374861
Lenke til kommentar
http://www.php.net/gettext

http://framework.zend.com/manual/en/zend.locale.html

 

Ikke finn opp hjulet på nytt med mindre du tror ditt blir rundere enn det som allerede finnes!

 

 

hvordan fungerer zend? vil dette automatisk oversette alt? eller hvor skal alle språk strengene lagres?

 

hvordan fungerer dette?

Jeg linket faktisk til manualen, dessverre til feil klasse.

Mente å linke til http://framework.zend.com/manual/en/zend.translate.html

 

Beklager dette.

Endret av Peter
Lenke til kommentar
Zend måten kan vell neppe være enkell. er ikke det enkleste å lage ei fil som heter

 

lang_no.php

 

der putter du

 

<?
$one ="one";

osv osv

 

så includer du den fila i alle filene dine? funker ikke det fett?

Blir fort håpløst når du har 5000 linjer som skal oversettes, og alle har hvert sitt variabelnavn? Ville heller brukt en assosiativ array, men zend gjør alt dette for deg noe du sparer stort på i større applikasjoner.

Lenke til kommentar

Jeg bruker en klasse som leser en XML fil.. Der definerer du alle ordene.. Hvis du prøver med ett ord som ikke finnes i XML'en, så generere den litt av xml taggene automatisk for deg.. Språk kan du definere i sessions, eller i det øyeblikket du kaller klassen.. Kan dessvere ikke legge den ut, men det fungerer veldig bra ;)

 

man gjør veldig enkelt sån:

 

$language new Translate('NO');
echo $language->ShowWord('ord');

Endret av WiRRE
Lenke til kommentar

Skrev en liten funksjon for dette en gang:

function translate($string)
{
global $lang;
@include('language/array.'.$lang.'.php');
if (isset($translate[$string]))
	return $translate[$string];
else
	return $string;
}

Denne går ut ifra at filen for hvert språk finnes. Som sa ser slik ut

<?php
$translate = Array (
'Translate me' => 'Oversett meg',
);
?>

Det den gjør er og oversete dersom den finner noe som passer. Ellers vil den beholde orginalteksten. Brukes således:

 

echo translate('Translate me');

 

Selve funksjonen burde kanskje skrives om til en klasse ja. Skal se på det litt senere. Men om ikke annet, så gir den ett hint om hvordan det kan gjøres :)

Lenke til kommentar
Tror han ville ha et kort fortalt svar over hva den faktisk gjør.. Utenom å grave igjennom en manual på nett..

http://www.caucho.com/resin-3.1/examples/q...ttext/index.xtp

er det dumt å gjøre det slik linken jeg posta da? det så jo såre enkelt ut.

og en annen ting, hvis du kjører alt inn i en asosiativ array bruker du adskillig mere ressurser for å holde styr på alt, enn slik det er gjort i linken jeg posta.

Har ikke benchmarka, men tenker logisk at det er slik.

Lenke til kommentar
Drawbacket med den funksjonen der er jo at hvis man kjører translate() 20 ganger på en side, blir språkfila inkludert 20 ganger.

 

Da vil det være bedre å inkuldere språkfila øverst, og ha global $translate i funksjonen.

include_once blir sikkert bedre å bruke da ja ;)

Lenke til kommentar
Drawbacket med den funksjonen der er jo at hvis man kjører translate() 20 ganger på en side, blir språkfila inkludert 20 ganger.

 

Da vil det være bedre å inkuldere språkfila øverst, og ha global $translate i funksjonen.

include_once blir sikkert bedre å bruke da ja ;)

Joa, men dersom man bruker include_once, så blir språkfila bare inkludert første gang, og neste oversetting vil ikke fungere. Og som sagt, det var ett hint om hvordan det kan gjøres (funker dersom siden er liten) eventuelt burde den vel gjøres om til en klasse.

Lenke til kommentar

Det er bare tull å bruke krefter på noe som allerede er funnet opp, og fungerer så vanvittig bra. Bruk gettext.

 

Det som skjer da er at du skriver _("Hello") når du scripter, og gettext finner tilsvarende linje i språkfilen og henter ut riktig tekst for det språket som skal brukes.

Språkfilen er en standard som brukes i de fleste store applikasjoner. Det finnes masse programmer for å lage disse språkfilene også.

 

<?php
// Set language to German
setlocale(LC_ALL, 'de_DE');

// Specify location of translation tables
bindtextdomain("myPHPApp", "./locale");

// Choose domain
textdomain("myPHPApp");

// Translation is looking for in ./locale/de_DE/LC_MESSAGES/myPHPApp.mo now

// Print a test message
echo gettext("Welcome to My PHP Application");

// Or use the alias _() for gettext()
echo _("Have a nice day");
?>

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...