Avatar billede cyberdude Nybegynder
20. januar 2006 - 12:23 Der er 6 kommentarer og
1 løsning

Udtræk variabler til brug andetsteds

Hejsa

Er ved at oversætte en side til flere sprog
Har til formålet lavet en database over "faste tekster" dvs. tekster som skrevet direkte i koden på designet...

Mit problem er at hvis jeg eks. ville lave en sprog fil til hvert sprog ville variablerne i den fil se sådant her ud

$a1 = "noget tekst";
$a2 = "noget andet tekst";
osv....

Men hvordan hulen får jeg det trukket ud af databasen, så det står sådant i den fil hvor jeg udtrækker det....

De variabler jeg skal bruge er
$row[0] - indeholder et id nummer hvor der så skal sættes et a foran
$row[2] - indeholder den tekst der skal vises der hvor jeg sætter variablen ind
$row[3] - indeholder eks. engelsk sprog, men sprogskiftet har jeg styr på, og kan selv fikse... det er listningen af diverse variabler jeg har problemer med...

Nogen bud ??
Avatar billede rednex Nybegynder
20. januar 2006 - 12:44 #1
Jeg ville foreslå disse felter i databasen:

id - Bare fordi du skal have en unik key
string_id - Denne id bruges til at identificere en bestemt vending. Dvs. at både den engelske og danske version af 'hej' har samme string_id.
lang - Fortæller hvilket sprog denne post er
text - Selve teksten på det sprog som er angivet i lang

Så skal du bruge en funktion a'la det her:

function getText($id, $lang = 'da')
{
    $res = mysql_query("SELECT text FROM tabel WHERE lang='$lang' AND string_id=$id);
    if($row = mysql_fetch_assoc($res))
        return $row['text'];
    return 'Ukendt streng';
}

Du bruger så f.eks. `echo getText(7, 'en')` til at hive teksten ud af databasen på det relevante sprog.

Jeg ville personligt foretrække tekstfiler med oversættelser, da det både er nemmere at lave nye oversættelser og ikke kræver særlig meget af serveren. Alle de database kald kan hurtigt blive dyre.
Du kan selvfølgelig også trække alle rækker af det valgte sprog ud i forvejen og gemme dem i et array, og så slå værdierne op det i stedet.
Avatar billede cyberdude Nybegynder
20. januar 2006 - 12:53 #2
Ville det være nemmere at gemem variablerne i eks. en da.php fil og så hente alle variablerne ind i en formular, og lade dem blive redigeret, for derefter at gemem dem igen i samem fil ??
Avatar billede rednex Nybegynder
20. januar 2006 - 13:47 #3
Det ville ikke være nemmere, men du sparer nogle kræfter når du skal have hevet værdierne ud igen. Og det er jo trods alt bedre at de sider som hele tiden bliver vist kører hurtigt, end at "oversætter siden" som kun sjældent bliver brugt, gør det.

Jeg har strikket et lille script sammen som kan bruges til at redigere tekst filerne:

<?php

$lang = isset($_REQUEST['lang']) ? $_REQUEST['lang'] : 'da';
if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') {
    $text = "<?php\n";
    foreach($_POST as $key => $value) {
        if ($key == 'lang')
            continue;
        $text .= "\$$key=\"$value\";\n";
    }
    $text .= "?>";
    $fp = fopen("lang_$lang.php", 'w');
    fwrite($fp, $text);
    fclose($fp);
    $lines = explode("\n", $text);
    unset($text);
}

if (!isset($lines))
    $lines = file("lang_$lang.php");

echo "<form method=\"POST\"><input type=\"hidden\" name=\"lang\" value=\"$lang\">";
$antal = count($lines);
for( $i = 0; $i < $antal; $i++)
{
    $lines[$i] = trim($lines[$i]);
    if ($lines[$i] == '<?php' || $lines[$i] == '?>' || $lines[$i] == '')
        continue;
    list($var, $tekst) = explode('=', $lines[$i]);
    $var = trim($var, "$ \t\r\n");
    $tekst = trim($tekst, "\"';\r\n\t");
    echo "$var - <input type=\"text\" name=\"$var\" value=\"$tekst\"><br>";
}
echo "<input type=\"submit\" value=\"send\"></form>";

?>
Avatar billede cyberdude Nybegynder
20. januar 2006 - 16:52 #4
det ser ud til at fungere...

Hvis man efter hver variabel skriver eks.
// tilhøre side 1
// tilhøre side 2
osv.

Vil det så være muligt at få scriptet til at indlæse det der står EFTER // og få det vist efter hver input felt ??
Blot så man ved hvilke side det er man ændre teksten på...
Avatar billede rednex Nybegynder
20. januar 2006 - 16:59 #5
Det kan man vel godt, men så begynder det at blive lidt langhåret. Der er du nødt til at lave et hidden input felt til hver variabel, som så indeholder kommentaren. Derudover skal du så også skille kommentaren ud fra resten.

Og nej, det er ikke noget jeg lige vil bikse sammen ;o)
Avatar billede cyberdude Nybegynder
20. januar 2006 - 17:04 #6
Er i gang med selv at splitte det op, for at få det til at hente den kommentar med ind...

Smid et svar så får du point :-)
Avatar billede rednex Nybegynder
20. januar 2006 - 17:19 #7
Grib! :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester