Beste måte å lage flerspråklig nettside?

kongen

kongemedlem
Hva er den beste måten å lage en flerspråklig nettside på?

Å lagre språkverdier i en database og hente nødvendige verdier for hver sidelasting.

Å lagre språkverdier i en språkfil (en fil for hvert språk) og inkludere denne på hver side. Hele filen vil inkluderes selv om bare noen få språkverdier trengs på siden som lastes inn.
 

xdex

Medlem
Avhengig av siden størrelse etc, og hvor avansert du ønsker at dette skal være, kan du selv velge hva som er best. Regner med at dette er en helt vanlig "a4" side, og ikke noe som skal være det nye facebook. Da ville jeg enkelt og greit hatt en fil pr språk.

Eksempel

Kode:
lang/en.php
lang/no.php

Hvor hver av disse filene inneholdt en array med språk, og selvfølgelig må dette være litt fleksibelt.

Eksempel på utsende (no.php)

Kode:
return array(
    'menu_frontpage' => 'Forsiden',
    'menu_api' => 'API',
    'menu_about' => 'Om oss',
    'menu_contact' => 'Kontakt',

);

Da kan bruke "menu_frontpage" array elementet, i view fila, eller den filen som du velger å skrive "echo" i . Du må selvfølgelig bruke session/cookie til å velge ett språk, og dersom ett språk ikke er valgt, må du ha ett standard språk. Velger du norsk, lastes no.php inn, ellers en.php osv. Du kan jo også dele opp filene om du ønsker det, og inkluderte alt som ligger i "lang/no" mappen, dersom norsk er valgt. Eller så kan du lage det slik at du velger hvilken språkfil som skal lastes. Når menyen renderes, kan du f.eks tvinge systemet til å alltid laste meny språket som ligger i lang/en/menu.php, så lenge alle språkene har de samme filene.

Når det er sagt, er det ikke uvanlig å laste inn hele språkfila i en load, selvfølgelig avhengig av størrelse og behov.
 

kongen

kongemedlem
Hvordan blir dette i view-fila? Jeg prøvde dette, men det funker ikke:

Kode:
include('no.php');
echo ['menu_frontpage'];
 

xdex

Medlem
Mine eksempler krever mer enn som så, og du vil absolutt finne ut, ganske raskt, at det ikke bare er å oversette en settning. Det jeg nevner over er for å gi deg en pekepinn, regner med du har noe php kunnskaper selv, til å forstå hvordan du kan utnytte dette fult ut.

Kode:
include('no.php');
echo ['menu_frontpage'];

Hva er det du prøver på, ved å bruke, echo ['menu_frontpage']? Så lenge du retunerer noe, må du også ha ett holdepunkt å hente det fra. Dersom hele arrayen lå i en variabel, f.eks $array, kunne du brukt $array['menu_frontpage'].

I min kode retunerer jeg bare en array, fordi det ofte er ment at det skal være relatert til en funksjon og/eller global variable, slik at du kan få lettere tilgang til språkfilene/oversettelser. Du må også gjerne tenke på hvordan du ønsker og oversette valideringer. "Beklager, du må minimum ha X antall tegn", da må du finne ut hvordan du kan lage din egen "X", slik at du slipper og ha 100 forskjellige "Minimum 3 bokstaver", du vil ikke bruke samme kode flere steder, lag noe som er mer dynamisk.

Eksempel i no.php kan jo da være,

Kode:
return array(
'minimum_chars' => 'Du må minimum ha :min antall bokstaver',
);

Her vil da :min f.eks. bli erstattet med hva du enn setter i en funksjon.
 

Pong

Jeg selger sʇɥƃıluʍop :)
Mja, man har jo det med .mo og .po filer som jeg aldri fikk til å fungere skikkelig.

Det jeg noen ganger gjør er å skrive teksten slik:
Kode:
__( 'Denne teksten er på norsk. Det er egentlig en funksjon som har to underlines som navn.' )

Så kan jeg la denne funksjonen __() høste inn alle tekster som er brukt fortløpende, og lagre nye i en tabell.
Da kan du gå gjennom denne tabellen, legge til en kolonne for hvert språk, og hente alle aktuelle oversetninger når appen startes eller noe.
 

kongen

kongemedlem
Hva hvis jeg gjør slik:

norsk.php
Kode:
$navn = 'Navn';
$adresse = 'Adresse';

engelsk.php
Kode:
$navn = 'Name';
$adresse = 'Address';

Og i view-file etter å ha funnet ut at brukeren er norsk:
Kode:
require 'norsk.php';
echo $navn;
echo $adresse;

Er det noen sikkerhetsrisikoer med dette? Er ikke dette den enkleste måten?
 

xdex

Medlem
Nei, men hvis du tenker deg om, er det høy risiko for at du kan overskrive variabler. Det er derfor det kan være greit og bruke en array, pluss at du har langt flere muligheter til å manipulere en array istede for enkle variabler.
 
Topp