Miscellaneous > Programming & Networking

Language translation in PHP

(1/1)

reactosguy:
So, I figured to translate words, preg_replace would do.

The idea of the script I'm trying to create is that you can insert it into an HTML page and if anybody wants to translate it, they can append ?language=(two-letter language code) to the URL and whatever is inside the dictionary will be translated.

It works with one word, but I want to make it work with multiple words, and loops aren't really helping.


--- Code: (PHP) ---<?php
$cxn = mysqli_connect("localhost","[hidden]","[hidden]","cgi");
$sql = "SELECT * FROM dictionary";
$result = mysqli_query($cxn,$sql);
$row = mysqli_fetch_assoc($result);
$max = mysqli_num_rows($result);
$i = 0;
for($i=0;$i>$max;++$i)
{
$string[$i] = $rows['first_en'].$rows['restofword_en'].$rows['last_en'];
echo $string[$i];
}
if($_GET['language'] == $row['tolanguage'])
{
$firste = $row['first_en'];
$laste = $row['last_en'];
$reste = $row['restofword_en'];
$firstn = $row['first'];
$lastn = $row['last'];
$restn = $row['restofword'];
$regex = "#^$firste($reste)$laste$#e";
$replacement = "('{$firstn}{$restn}{$lastn}')";
for($i2=0;$i2>$max;++$i2)
{
$output[$i2] = preg_replace($regex,$replacement,$string[$i2]);
echo $output[$i2];
}
}
else
{
echo $string;
}
?>

--- End code ---

Works great with one row like this:


--- Code: (PHP) ---<?php
$cxn = mysqli_connect("localhost","[hidden]","[hidden]","cgi");
$sql = "SELECT * FROM dictionary";
$result = mysqli_query($cxn,$sql);
$row = mysqli_fetch_assoc($result);
$string = $rows['first_en'].$rows['restofword_en'].$rows['last_en'];
if($_GET['language'] == $row['tolanguage'])
{
$firste = $row['first_en'];
$laste = $row['last_en'];
$reste = $row['restofword_en'];
$firstn = $row['first'];
$lastn = $row['last'];
$restn = $row['restofword'];
$regex = "#^$firste($reste)$laste$#e";
$replacement = "('{$firstn}{$restn}{$lastn}')";
$output = preg_replace($regex,$replacement,$string);
echo $output;
}
else
{
echo $string;
}
?>

--- End code ---

Is there any way to loop preg_replace so that if I have multiple words all of them will be translated?

Attachments: Table.

TheQuirk:
I'll be honest, I haven't look at the code. But if you have it figure out for one word, this is probably what you are looking for: http://php.net/manual/en/function.strtok.php

If you don't like tokenizing, you could use this, and loop over the index of the array you get: http://www.php.net/manual/en/function.explode.php

reactosguy:
I think I found a solution.


--- Code: (PHP) ---<?php
$cxn = mysqli_connect("localhost","[hidden]","[hidden]","cgi");
$sql = "SELECT * FROM dictionary WHERE tolanguage = '$_GET[language]'";
$result = mysqli_query($cxn,$sql);
$rows = mysqli_fetch_assoc($result);

$data = "Hello, I am a user.";

if($_GET['language'] == $rows['tolanguage'])
{
while($row = mysqli_fetch_assoc($result))
{
$data = str_replace($row['oldword'],$row['newword'],$data);
}
}

echo $data;

--- End code ---

Lines 1-3: PHP fetches data from a MySQL database.

Line 4: The $rows variable is created. This variable contains the data from the database in an array.

Line 6: The $data variable is created to store a string.

Line 8: PHP asks MySQL to check for any rows where the tolanguage column and the language parameter match. If they do, the translation begins!

Line 10: A while loop is created.

Line 12: The words get replaced every time the while loop loops and the variable is different.

Line 16:  The $data variable is echoed.

Navigation

[0] Message Index

Go to full version