Praat mee over van alles en nog wat!
Forumregels
Dit forum is voor alle zinnige gesprekken buiten phpBB om. Discussies en gesprekken over interessante onderwerpen.
Een nieuw onderwerp moet..:
- uiteraard voldoen aan de algemene voorwaarden
- niet passen in de gewone supportfora
- interessante zijn voor het overgrote deel van onze gebruikers
- een neutrale of positieve ondertoon hebben
- anders zijn dan bestaande onderwerpen
-
ElbertF
- Berichten: 5803
- Lid geworden op: 12 okt 2004, 08:34
-
Contacteer:
Bericht
door ElbertF » 20 jun 2005, 17:02
Ik wil mijn pagina's op zo'n manier verwerken dat alle tekst die tussen accolades staat vertaald wordt. Dus '
<div>{englisch}</div>' wordt '
<div>Nederlands</div>'. Even dacht ik het heel simpel te kunnen bereiken met preg_replace, maar mijn probeersel hieronder werkt duidelijk niet.
Code: Selecteer alles
$lang['b'] = 'd';
$lang['\1'] = 'fout!';
$page = 'a {b} c';
print $page = preg_replace('/{(.+?)}/', $lang['\1'], $page);
De output is hier '
a fout! c', in plaats van '
a d c'. Iemand een idee hoe ik dit anders kan doen?

-
flance
- Berichten: 95
- Lid geworden op: 01 feb 2005, 17:50
Bericht
door flance » 20 jun 2005, 19:11
$lang['\1']
alles in enkele quotes word 100% zo genomen als ingegeven, maar daar dus $lang["\1"] van. Als $lang['b'] bijvoorbeeld bestaad zal die die pakken en anders gewoon de $lang['\1']

-
ElbertF
- Berichten: 5803
- Lid geworden op: 12 okt 2004, 08:34
-
Contacteer:
Bericht
door ElbertF » 20 jun 2005, 19:12
Had ik ook al geprobeerd, geeft hetzelfde resultaat..
-
flance
- Berichten: 95
- Lid geworden op: 01 feb 2005, 17:50
Bericht
door flance » 20 jun 2005, 19:17
Ik weet dat het niet zo netjes is, maar zo zou het kunnen:
Code: Selecteer alles
if (preg_match("/{(.+?)}/", $page,$array))
{
if(isset($lang[$array[0]]))
{
$page=str_replace('{'.$array[0].'}',$lang[$array[0]],$page);
}
else
{
$page=$lang['\1'];
}
}
else
{
$page=$lang['\1'];
}
print($page);
-
Paul
- Beheerder

- Berichten: 20316
- Lid geworden op: 23 okt 2003, 11:38
- Locatie: Utrecht
-
Contacteer:
Bericht
door Paul » 20 jun 2005, 19:18
Dan moet het toch dit zijn:
Code: Selecteer alles
if (preg_match("/{(.+?)}/", $page,$array))
{
if(isset($lang[$array[0]]))
{
$page=str_replace('{'.$array[0].'}',$lang[$array[0]],$page);
}
else
{
$page=str_replace('{'.$array[0].'}',$lang['\1'],$page);
}
}
else
{
$page=str_replace('{'.$array[0].'}',$lang['\1'],$page);
}
print($page);
??
-
flance
- Berichten: 95
- Lid geworden op: 01 feb 2005, 17:50
Bericht
door flance » 20 jun 2005, 19:20
Inderdaad, even niet aan gedacht. bedankt voor je oplettendheid
ALleen die onderste klopt niet helemaal... daar bestaat $array namelijk niet.
Laatst gewijzigd door
flance op 20 jun 2005, 19:21, 1 keer totaal gewijzigd.
-
Paul
- Beheerder

- Berichten: 20316
- Lid geworden op: 23 okt 2003, 11:38
- Locatie: Utrecht
-
Contacteer:
Bericht
door Paul » 20 jun 2005, 19:21
Heb toch niks te doen

-
ElbertF
- Berichten: 5803
- Lid geworden op: 12 okt 2004, 08:34
-
Contacteer:
Bericht
door ElbertF » 20 jun 2005, 19:23
Maar dan ga je er nog steeds vanuit dat je $page=$lang['\1'] kan gebruiken, en dat kan dus blijkbaar niet. Met preg_match() en $array[0] kan het wel, maar dan krijg je problemen als je meerdere (verschillende) woorden wil vertalen.
-
ElbertF
- Berichten: 5803
- Lid geworden op: 12 okt 2004, 08:34
-
Contacteer:
Bericht
door ElbertF » 20 jun 2005, 19:45
Bedankt jongens, ik heb het nu zo opgelost:
Code: Selecteer alles
<?php
$lang['b'] = 'd';
$page = 'a {b} c';
foreach ( $lang as $word => $translation )
{
$page = preg_replace('/{' . $word . '}/', $translation, $page);
}
print $page;
?>
Het parsen gaat allicht iets trager, maar het werkt.
-
flance
- Berichten: 95
- Lid geworden op: 01 feb 2005, 17:50
Bericht
door flance » 20 jun 2005, 19:47
omg
De hele lang doorlopen is een optie, maar dat duurt écht heel lang.. en je hebt kans op fouten. maar het is een manier.
-
ElbertF
- Berichten: 5803
- Lid geworden op: 12 okt 2004, 08:34
-
Contacteer:
Bericht
door ElbertF » 20 jun 2005, 19:50
Het niet voor phpBB trouwens, mijn taalbestanden zullen meestal korter zijn. Ik kan ook gewoon "<div><?php print $lang['woord'] ?></div>" in de HTML opnemen, maar erg netjes is het niet.
-
ElbertF
- Berichten: 5803
- Lid geworden op: 12 okt 2004, 08:34
-
Contacteer:
Bericht
door ElbertF » 20 jun 2005, 20:51
Zo dan
Code: Selecteer alles
<?php
$lang['b'] = 'e';
$lang['d'] = 'f';
$page = 'a {b} c {d}';
preg_match_all('/{(.+?)}+/', $page, $match);
for ( $row = 0; $row < count($match[1]); $row ++ )
{
$page = preg_replace('/{' . $match[1][$row] . '}/', $lang[$match[1][$row]], $page);
}
print $page;
?>
Hij loopt nu alleen de taalbestanden voor die daadwerkelijk voorkomen in de pagina
