sventoepke.de

Ich erschaffe das, was Sie sich vorstellen

PHP – Einfache Mehrsprachigkeit im eigenen Code

So hier will Ich Euch mal was ganz einfaches aber doch geniales Snippet von mir präsentieren. Es handelt sich hierbei um ein kleines Beispiel, um Eure Entwicklung in PHP mehrsprachig anzuzeigen. Hierzu benötigt man nur 1 FunktionsKlasse und eine weitere Datei pro Sprache.

Wir fangen mit der FunktionsKlasse an, wie im CodeBeispiel gezeigt. Nennt Eure Klasse „LangText“.

class LangText
{
   //Code...
}

Einen Konstruktor braucht Ihr hier nicht. Es gibt nur 2 Funktionen, wobei die erste innerhalb der Klasse als Methode steht und die zweite außerhalb der Klasse agiert. Die erste Funktion nennen wir jetzt „getTranslation“ und geben Ihr folgende 3 Parameter mit. Zuerst die Variable „key“, dahinter „value“ und am Schluss noch „params“. Innerhalb der Funktion wird mithilfe der „txtKey“ Variable nach der definierten Konstante gesucht und dessen Wert als Übersetzungstext geladen. Wird kein passender Schlüssel gefunden wird der normale Wert mit der Variable „value“ ausgegeben. Sind dynamische Werte in den Texten so ersetzt man sie durch ein %s und packt diese in ein Array als dritten Parameter in die Funktion

public static function 
getTranslation( $key = null, 
                $value = null,
                $params = array() )
{
	$valueTmp = @constant( $key );
	$value	= ( isset( $valueTmp ) && $valueTmp != '' ) ? $valueTmp: $value;
	$text	= $value;	
	if( count( $params ) >= 1 )
	{
		$text = vsprintf( $value, $params );
		if( $text == '' )
		{
			print $value;
		}
	}
	return $text
}

Um nicht jedes Mal den Klassennamen mit aufrufen zu müssen, erstellt Ihr eine Funktion außerhalb der Klasse und nennt sie „langTxt“. Diese gibt mittels return Befehls dann die Ausgabe der statischen Methode.

function langTxt($key = null, 
		 $value = null,
		 $params = array() )
{
	return LangText::getTranslation( $key, $value, $params );
}

Hier ist nochmal der ganze Code der Klasse abgebildet. Beachtet oben ist bereits ein Include Anweisung für die Sprachdateien. Wir Ihr sehen könnt gibt es einen URL Parameter, den das Skript auslesen will. Und nutzt diesen für den Inlcude der Textdatei. In dieser sind alle Übersetzungen als Konstanten definiert.

Beispiel:

define( "TXT_WELCOME", "Welcome %s" );

Aufruf in der Programmierung:

langTxt( "TXT_WELCOME", "Willkommen" );

Aufruf in der Programmierung mit dynamischer Begrüßung:

langTxt( "TXT_WELCOME", "Willkommen %s", array( 'Herr' ) );

Wird eine Konstante über die „getTranslation“ Methode nicht gefunden, so verwendet das Skript den mitgegbenen Wert. Ebenso wenn das Skript keinen errfolgreichen Include hinkriegt, da vielleicht die Sprache nicht vorhanden ist, arbeitet es auch mit dem Standartwert aus „value“.

<?php
$langCode = $_REQUEST['lang'];
@include_once( 'LocaleText_' . $langCode . '.php' );


class LangText
{
	public static function 
	getTranslation( $key = null, 
	               $value = null,
	               $params = array() )
	{
		$valueTmp = @constant( $key );
		$value	= ( isset( $valueTmp ) && $valueTmp != '' ) ? $valueTmp: $value;
		$text	= $value;	
		if( count( $params ) >= 1 )
		{
			$text = vsprintf( $value, $params );
			if( $text == '' )
			{
				print $value;
			}
		}
		return $text
	}
}

function langTxt($key = null, 
		 $value = null,
		 $params = array() )
{
	return LangText::getTranslation( $key, $value, $params );
}
?>