Dieser Beitrag zeigt Ihnen wie Sie schnell und einfach in PHP eine Sprachen-Unabhängige Seite entwickeln. Hierfür wird mit Sessions einfach ein Sprach-Code genutzt und diese werden dann in der gewünschten Sprache aus der Datenbank geladen.

Bitte beachten Sie, dass man natürlich statt Codes wie „1001“ auch einen String übergeben kann. Das erleichtert die Arbeit natürlich, da der Text eher zu finden ist, als eine Zahl. Also könnten Sie statt „1001“ auch einfach „get_welcome_message“ benutzen.

Außerdem sollten Sie beachten, dass Sie alle Inputs eines Users immer sanitisieren. Dies habe ich in diesem Tutorial jetzt nicht gemacht, da ich es so einfach halten wollte wie möglich. Natürlich ist der unten stehende Code nur ein „Proof of Concept“, daher ist Copy&Paste nicht zu empfehlen.

Datenbankeinträge

Zuerst bereiten wir die Datenbank vor. Hierfür können Sie diesen Code benutzen:

--
-- Tabellenstruktur für Tabelle `test_lang`
--

CREATE TABLE `test_lang` (
  `lang_id` int(11) NOT NULL,
  `text_code` int(4) NOT NULL,
  `lang_code` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
  `text` text COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Daten für Tabelle `test_lang`
--

INSERT INTO `test_lang` (`lang_id`, `text_code`, `lang_code`, `text`) VALUES
(1, 1000, 'DE', 'Sprachauswahl'),
(2, 1001, 'DE', 'Benutzername'),
(3, 1002, 'DE', 'Passwort'),
(4, 1003, 'DE', 'Anmelden'),
(5, 1000, 'EN', 'Language selection'),
(6, 1001, 'EN', 'Username'),
(7, 1002, 'EN', 'Password'),
(8, 1003, 'EN', 'Login');

Hiermit legen wir die Testtabelle an und fügen 8 Testdatensätze ein, die für Englisch und Deutsch unsere Formen mit der jeweiligen Sprache benennen.

PHP Code

Diese Funktion dient zum wiedergeben des gewünschten Textes beim Aufruf. Sie wird so aufgerufen:

get_text(<CODE>, <SPRACH-CODE>);

Und hier der Code für die Funktion:

//Aufruf der Übersetzungsfunktion
	function get_text($code, $lang)
	{
		global $con;
		
		//Lade Text aus DB
		$get_text = mysqli_query($con, "SELECT `text` FROM `test_lang` WHERE `text_code` = '$code' AND `lang_code` = '$lang' LIMIT 1");
		if(!mysqli_num_rows($get_text))
		{
			//Es konnte kein Text gefunden werden
			return 'Error retrieving text for this language';
		}
		else
		{
			//Text gefunden
			$gt = mysqli_fetch_array($get_text);
			return $gt['text'];
		}
	}

In den Kommentaren sehen Sie, was welcher Teil macht.

Hier finden Sie ein komplett fertiges Beispiel:

<?php

	require '../config.php';
	session_start();
	
	//Wir setzen Standardweise die Sprache auf Deutsch, falls wir keine andere Sprache ausgewählt haben
	if(!isset($_SESSION['lang']))
	{
		$lang = "DE";
	}
	else
	{
		$lang = $_SESSION['lang'];
	}

	
	//Aufruf der Übersetzungsfunktion
	function get_text($code, $lang)
	{
		global $con;
		
		//Lade Text aus DB
		$get_text = mysqli_query($con, "SELECT `text` FROM `test_lang` WHERE `text_code` = '$code' AND `lang_code` = '$lang' LIMIT 1");
		if(!mysqli_num_rows($get_text))
		{
			//Es konnte kein Text gefunden werden
			return 'Error retrieving text for this language';
		}
		else
		{
			//Text gefunden
			$gt = mysqli_fetch_array($get_text);
			return $gt['text'];
		}
	}
	
	if(!$con)
	{
		echo "No DB found";
	}
	else
	{
		//Falls wir eine Sprache ausgewählt haben, wollen wir diese nun setzen.
		if(isset($_POST['lang_code']))
		{
			//WICHTIG: FORM DATEN / USER INPUT IMMER SANITISIEREN!
			$_SESSION['lang'] = $_POST['lang_code'];
		}
		
		?>
		<html>
			<head>
				<meta charset="utf8">
				<meta language="<?php echo $lang; ?>">
				<title>Localization Tutorial via PHP</title>
				<meta name="author" content="Lukas Dörr @ RZDEV.DE">
			</head>
			<body>
				<p>
				<h4><?php echo get_text(1000, $lang); ?></h4>
				<form action="index.php" method="post">
					<select name="lang_code">
						<option <?php if($lang="DE") echo " selected "; ?> value="DE">Deutsch</option>
						<option <?php if($lang="EN") echo " selected "; ?> value="EN">English</option>
					</select>
					<input type="submit" value="OK">
				</form>
				</p>
				<h1>Login</h1>
				<p>
					<?php echo get_text(1001, $lang); ?><br>
					<input type="text" name="username">
				</p>
				<p>
					<?php echo get_text(1002, $lang); ?><br>
					<input type="password" name="username">
				</p>
				<p>
					<input type="submit" value="<?php echo get_text(1003, $lang); ?>">
				</p>
			</body>
		</html>
		<?php
	}