ZodiacXP
Erfahrenes Mitglied
Sodelä.
Rumgebastelt an einer Klasse zum Übersetzen und schon das Herausfinden der geeignetsten Sprache brauch 3 Bildschirmseiten.
Wenn eine Sprache schon übergeben wurde (von $_SESSION["langID"] oder so) wird diese direkt verwendet. Ansonsten:
Hat jemand andere Varianten oder einen Verbesserungsvorschlag?
Rumgebastelt an einer Klasse zum Übersetzen und schon das Herausfinden der geeignetsten Sprache brauch 3 Bildschirmseiten.
Wenn eine Sprache schon übergeben wurde (von $_SESSION["langID"] oder so) wird diese direkt verwendet. Ansonsten:
- Alle Browsersprachen in ein Array
- Sprachen mit "-" zusätzlich trennen
- "Qualität" zum Spracharray hinzufügen
- In SQL-Tabelle nachsehen welche "Übersetzungen" vorhanden sind
- Die beste (Qualitätsvergleich) verwenden / ID merken
Hat jemand andere Varianten oder einen Verbesserungsvorschlag?
PHP:
/**
* LICENSE: This source file is subject to
* "Attribution-Noncommercial-Share Alike 3.0 Unported" license
* that is available through the world-wide-web at the following URI:
* http://creativecommons.org/licenses/by-nc-sa/3.0/
* If you did not receive a copy of the license and are unable to
* obtain it through the web, please send a note to zodiacxp@web.de
* so I can mail you a copy.
* Put this always visible and reachable on your page:
* Translation-Class 1.0.0 (c) ZodiacXP
*
*/
class Translation
{
public $iLanguageID = NULL;
public $iSQL = 0; // Query-Counter
private $rSQL; // SQL-Resource
function __construct($rSQL, $iLanguageID = NULL)
{
$this->rSQL = $rSQL;
if ($iLanguageID != NULL)
{
$this->iLanguageID = $iLanguageID;
}
else
{
// Wenn Browser keine Sprache anbietet "Deutsch" nehmen
if (empty($_SERVER['HTTP_ACCEPT_LANGUAGE']))
{
$aLanguages = array('de' => 1);
}
else {
// Alle Browsersprachen in ein Array
$a = preg_split('/,\s*/', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
foreach ($a as $s)
{
// Qualität etc herausfinden
preg_match ('/^([a-z]{1,8}(?:-[a-z]{1,8})*)(?:;\s*q=(0(?:\.[0-9]{1,3})?|1(?:\.0{1,3})?))?$/i', $s, $aLanguage);
// Sprachen mit "-" zusätzlich trennen
if (strpos($aLanguage[1], "-"))
{
$key = substr($aLanguage[1], strpos($aLanguage[1], "-")+1);
}
else
{
$key = $aLanguage[1];
}
// Wenn keine Qualität vorhanden einfach 1 setzen
if (!$aLanguage[2])
{
$aLanguage[2] = 1;
}
// "Qualität" zum Spracharray hinzufügen
if ($aLanguages[$key] < $aLanguage[2])
{
$aLanguages[$key] = (float) $aLanguage[2];
}
}
}
$fQuality = (float) 0.0;
// In SQL-Tabelle nachsehen welche "Übersetzungen" vorhanden sind
$s = "
SELECT `languageID`, `languageTag`, `dateFormat`
FROM `languages`
WHERE `languageTag` = '" . join("' OR `languageTag` = '", array_keys($aLanguages)) . "'"
;
$hSQL = mysql_query($s, $rSQL);
// Die beste (Qualitätsvergleich) verwenden
while ($a = mysql_fetch_row($hSQL) )
{
if ($fQuality < $aLanguages[$a[1]])
{
// ID merken
$this->iLanguageID = $a[0];
$fQuality = $aLanguages[$a[1]];
}
}
mysql_free_result($hSQL);
}
}
}