ZoyZat Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 (endret) Hei! Jeg skal lage en side som jeg skal ha flere språk på, dette skal man kunne velge på forsiden ved å trykke på et flagg med sitt språk. Finnes det er veldig enkel kode for dette? Endret 19. januar 2008 av ZoyZat Lenke til kommentar
Gjest Slettet+1374861 Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 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
AnaXyd Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 Faktisk ganske smart løsning. Men mye jobb og legge inn alle variablene osv! Men det blir lettere om sida er statisk.. Lenke til kommentar
Alex Moran Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 (endret) 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 19. januar 2008 av hans3k Lenke til kommentar
Gjest Slettet+1374861 Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 (endret) 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 19. januar 2008 av Slettet+1374861 Lenke til kommentar
Peter Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 (endret) 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! Endret 19. januar 2008 av Peter Lenke til kommentar
Dryper Skrevet 19. januar 2008 Del Skrevet 19. januar 2008 http://www.php.net/gettexthttp://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? Lenke til kommentar
Peter Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 (endret) http://www.php.net/gettexthttp://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 20. januar 2008 av Peter Lenke til kommentar
AnaXyd Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 Tror han ville ha et kort fortalt svar over hva den faktisk gjør.. Utenom å grave igjennom en manual på nett.. Lenke til kommentar
ThorB Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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 Lenke til kommentar
Dryper Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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? Lenke til kommentar
Peter Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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
WiRRE Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 (endret) 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 20. januar 2008 av WiRRE Lenke til kommentar
pulse Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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
Alex Moran Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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. Lenke til kommentar
ThorB Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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
ThorB Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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
pulse Skrevet 20. januar 2008 Del Skrevet 20. januar 2008 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
LOOM Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 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
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå