Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 13:03

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Multi-Language with PHP

Discussion on Multi-Language with PHP within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2012
Posts: 184
Received Thanks: 72
Multi-Language with PHP

Hallo liebe Comunety ich hätte da mal ein paar fragen
wie ich es am besten anstelle eine mehrsprachige webseite
zu schreiben wie es google, youtube und co. vormacht.

PHP Code:
http://www.youtube.com/?hl=de

http://www.google.com/?hl=de 
In dieser art stelle ich mir das ganze vor zu beachten ist das ich nichts statisches habe ich habe eine reine dynamische Webseite also mit switch lade ich den content.

Bitte beachtet das ich kein noob bin also wäre nett wenn ihr Posts wie "Google it, Google ist dein Freund, Let me google it for you"
sein lassen könntet.

Paar versuche habe ich schon gestartet ...
PHP Code:
<?php
    
switch ($_GET['hl']) 
    {
        case 
'de':
            include 
realpath('./language/lang.german.php');
        break;
        
        case 
'en':
            include 
realpath('./language/lang.german.php');
        break;
    }
?>
ich möchte das ganze gern in einem cookie abspeichern...

Freue micht auf brauchbare antworten.. Thanks...
ιcσяє is offline  
Old 09/02/2012, 15:43   #2
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Es gibt 2 Varianten, wie ich das gerne (je nach Art der Website) löse:

Aber zuerst einmal allgemein wie man die Sprache des Users bekommt, dazu benutze ich gerne eine Mischung aus Cookie bzw. Request-Parameter und Browser-Erkennung:

PHP Code:

$lang
=$_REQUEST['language'];
if (
$lang==""
{
  
$lang=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
  if (
strlen($lang)>2$lang=substr ($lang,0,2);
}
elseif (
strlen($lang)>2$lang=substr ($lang,0,2);
if (
$lang=""$lang="en"
1. Array
PHP Code:
if ($lang=="de")
{
   
$_LANGUAGE['home']="Willkommen liebe User";
}
else
{
   
$_LANGUAGE['home']="Welcome dear users";


Oder 2. Möglichkeit:

PHP Code:
echo file_get_contents("html/".$lang."/home.html"); 
Dadurch kannst du die Websiten auch unterschiedlich gestalten, je nachdem welche Sprache sie sind, vielleicht gibt es für deutschsprachige User ja andere Angebote als für englischsprachige.

Welche dieser 2 Methoden man nimmt ist Geschmackssache ich bevorzuge die 1. auch wenn diese von der Geschwindigkeit her langsamer ist, sie gefällt mir trotzdem besser.
Shadow992 is offline  
Old 09/02/2012, 16:48   #3
 
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
Du könntest dir anschauen, wie es in größeren Frameworks realisiert wurde und dich davon inspirieren lassen (damit meine ich nicht die eigentliche Umsetzung, sondern mehr die Features / API):


dowhile is offline  
Old 09/02/2012, 18:09   #4
 
elite*gold: 0
Join Date: Jul 2012
Posts: 11
Received Thanks: 2
Schau mal in mein Profil ich hatte mal für smarty sowas Released
Bastofa is offline  
Old 09/02/2012, 18:25   #5
 
elite*gold: 0
Join Date: Jul 2012
Posts: 184
Received Thanks: 72
Quote:
Originally Posted by Shadow992 View Post
Es gibt 2 Varianten, wie ich das gerne (je nach Art der Website) löse:

Aber zuerst einmal allgemein wie man die Sprache des Users bekommt, dazu benutze ich gerne eine Mischung aus Cookie bzw. Request-Parameter und Browser-Erkennung:

PHP Code:

$lang
=$_REQUEST['language'];
if (
$lang==""
{
  
$lang=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
  if (
strlen($lang)>2$lang=substr ($lang,0,2);
}
elseif (
strlen($lang)>2$lang=substr ($lang,0,2);
if (
$lang=""$lang="en"
1. Array
PHP Code:
if ($lang=="de")
{
   
$_LANGUAGE['home']="Willkommen liebe User";
}
else
{
   
$_LANGUAGE['home']="Welcome dear users";


Oder 2. Möglichkeit:

PHP Code:
echo file_get_contents("html/".$lang."/home.html"); 
Dadurch kannst du die Websiten auch unterschiedlich gestalten, je nachdem welche Sprache sie sind, vielleicht gibt es für deutschsprachige User ja andere Angebote als für englischsprachige.

Welche dieser 2 Methoden man nimmt ist Geschmackssache ich bevorzuge die 1. auch wenn diese von der Geschwindigkeit her langsamer ist, sie gefällt mir trotzdem besser.

Genau so was kompliziertes suche ich C(:
würdest du da genauer drauf eingehen ? (wie ich das am besten einbinden kann)

Ich versteh jz durch diesen Script das er sich die sprache vom Browser holt und wenn die antwort von $_SERVER['HTTP_ACCEPT_LANGUAGE'] größer als 2 ist soll er die kürzen auf zwei stellen sollte er keine antwort bekommen ist die sprache automatisch englisch.. und ja array das versteht jeder xD

Geschwindigkeit her langsamer ist

Da handelt es sich nur im Micro Sekunden ^^ das dürfte nicht das prob sein

PS: Ein Array geht so oder ?!?

PHP Code:
$_LANGUAGE = array
(
    
'home' => 'Willkommen liebe User'
); 
du hast ne Variable zugeteilt oder seh ich da etwas falsch

Quote:
Originally Posted by Bastofa View Post
Schau mal in mein Profil ich hatte mal für smarty sowas Released
Hatte jetzt nichts genaueres gefunden in deinem Profil ist ziemlich leer xD
ιcσяє is offline  
Old 09/02/2012, 18:51   #6
 
kissein's Avatar
 
elite*gold: 0
Join Date: Sep 2005
Posts: 426
Received Thanks: 87
Quote:
PS: Ein Array geht so oder ?!?

du hast ne Variable zugeteilt oder seh ich da etwas falsch
Er hat einen Wert dem Index 'home' des Arrays $_LANGUAGE hinzugewiesen.

Quote:
$_LANGUAGE = array
(
'home' => 'Willkommen liebe User'
);
Dieser Aufbau steht in der jeweiligen lang.php datei
kissein is offline  
Old 09/02/2012, 21:01   #7
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by ιcσяє View Post
Genau so was kompliziertes suche ich C(:
würdest du da genauer drauf eingehen ? (wie ich das am besten einbinden kann)

Ich versteh jz durch diesen Script das er sich die sprache vom Browser holt und wenn die antwort von $_SERVER['HTTP_ACCEPT_LANGUAGE'] größer als 2 ist soll er die kürzen auf zwei stellen sollte er keine antwort bekommen ist die sprache automatisch englisch.. und ja array das versteht jeder xD

Geschwindigkeit her langsamer ist

Da handelt es sich nur im Micro Sekunden ^^ das dürfte nicht das prob sein

PS: Ein Array geht so oder ?!?

PHP Code:
$_LANGUAGE = array
(
    
'home' => 'Willkommen liebe User'
); 
du hast ne Variable zugeteilt oder seh ich da etwas falsch



Hatte jetzt nichts genaueres gefunden in deinem Profil ist ziemlich leer xD
Naja kompliziert ist das jetzt nicht wirklich.
Ich habe dem Array $_LANGUAGE mit dem index "home" einen Wert zugewiesen, das ist genau dasselbe wie dein Code.

Das ist bei einer relativ großen Seite und bei vielen kleinen Übersetzungen mehr als ein paar Microsekunden, bei Spielen wäre diese Methode wohl eher eine, die man nicht bevorzugen sollte, da sie eben mehr CPU frisst, dafür aber genau dasselbe leistet. Aber ich denke solche Probleme hast du nicht, deswegen nimm was dir lieber ist.

Genauer darauf eingehen? Hmm ich wüsste nicht wie, eigentlich ist alles schon gesagt und erklärt. Ich könnte es dir zwar theoretisch einmal an einen deiner Skripts zeigen wie das geht, aber meine Zeit ist leider sehr begrenzt, also entweder versuchst du mich zu bestechen oder du fragst einfach mal die anderen netten User hier bzw. erklärst wo genau dein Problem ist.
Shadow992 is offline  
Old 09/02/2012, 21:54   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Quote:
Originally Posted by Shadow992 View Post
Oder 2. Möglichkeit:

PHP Code:
echo file_get_contents("html/".$lang."/home.html"); 
Dadurch kannst du die Websiten auch unterschiedlich gestalten, je nachdem welche Sprache sie sind, vielleicht gibt es für deutschsprachige User ja andere Angebote als für englischsprachige.

Welche dieser 2 Methoden man nimmt ist Geschmackssache ich bevorzuge die 1. auch wenn diese von der Geschwindigkeit her langsamer ist, sie gefällt mir trotzdem besser.
Schlechte Idee, niemals Input vom Browser einfach so einbauen.
MrSm!th is offline  
Old 09/02/2012, 22:22   #9
 
Shadow992's Avatar
 
elite*gold: 77
Join Date: May 2008
Posts: 5,430
Received Thanks: 5,876
Quote:
Originally Posted by MrSm!th View Post
Schlechte Idee, niemals Input vom Browser einfach so einbauen.
Ich sehe darin kein Problem, wenn im ordner html nichts anderes als die HTML-Dateien sind und da die Variable eh auf 2 Buchstaben beschränkt ist, sehe ich da auch kein Sicherheitsproblem. Es könnte nur Probleme geben, wenn man eine Sprache hat, die nicht unterstützt wird, da muss man dann halt noch eine Validierung einbauen, der verfügbaren Sprachen, aber sonst sehe ich darin kein Sicherheitsproblem oder übersehe ich da etwas?
Shadow992 is offline  
Old 09/04/2012, 14:35   #10

 
Flyff_Service's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 680
Received Thanks: 337
Ich würde dir Poedit empfehlen!

PHP Code:
<?php
header
('Content-type: text/html; charset=UTF-8');
$lang 'de_DE';
putenv("LC_ALL={$lang}");
setlocale(LC_ALL$lang);

// Angeben des Pfads der Übersetzungstabellen
bindtextdomain("test""./locale");
textdomain("test");

/*
...
Viel Code
...
*/

// Die Übersetzung wird nun in ./locale/de_DE/LC_MESSAGES/test.mo gesucht
// Entweder gettext($string); oder _($string); für die Übersetzung benutzen
echo gettext("Welcome to my PHP-Application");
echo 
_("Welcome to my PHP-Application");

// Auch Singular und Plural Unterscheidung ist mithilfe der Funktion ngettext($singular, $plural, $n);  möglich
// Hierfür wird im Nachhinein sprintf genutzt um die Mengenangaben in der jeweiligen Übersetzung an der richtigen Stelle auszugeben
// %d für DWORD
$anzahl 100;
echo 
sprintf(ngettext("%d Item""%d Items"$anzahl), $anzahl);
// Ausgabe
// 100 Items bzw. die Übersetzung
$anzahl 1;
echo 
sprintf(ngettext("%d Item""%d Items"$anzahl), $anzahl);
// Ausgabe
// 1 Item bzw. die Übersetzung
?>
Fehlerbehandlung wenn zum Beispiel die gesetzte Sprache nicht existiert, solltest du selber hinkriegen.

Die .po Sprachdateien generierst bzw. editierst du mit dem Programm Poedit, welches auch nach Einstellung die .mo Datei automatisch beim Speichern erstellt.

Wie beginne ich?

Wie aktiviere ich das automatische Erstellen der .mo Datei im gleichen Verzeichnis?

Weiterführende Links:



Credits: 100% Flyff_Service

Im Anhang eine Beispielsanwendung.
Attached Files
File Type: rar Source.rar (1.6 KB, 4 views)
Flyff_Service is offline  
Old 09/07/2012, 14:35   #11


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Du übersiehst etwas. Man kann aus dem Pfad ausbrechen. Gut, bei zwei Buchstaben sollte das nicht viele Probleme bereiten, aber am besten gar nicht erst damit anfangen.

Lieber ein Aaray mit Dateien und die Sprache als Index.
MrSm!th is offline  
Old 09/07/2012, 16:51   #12

 
Flyff_Service's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 680
Received Thanks: 337
Wenn du mich meinst, lies bitte noch mal den gesamten Beitrag.
Quote:
Fehlerbehandlung wenn zum Beispiel die gesetzte Sprache nicht existiert, solltest du selber hinkriegen.
Ich persönlich finde Arrays für Multi-Language ist kein guter Stil.
Flyff_Service is offline  
Old 09/07/2012, 19:47   #13
 
elite*gold: 0
Join Date: Oct 2008
Posts: 319
Received Thanks: 88
Quote:
Bitte beachtet das ich kein noob bin also wäre nett wenn ihr Posts wie "Google it, Google ist dein Freund, Let me google it for you"
sein lassen könntet.
Und dann kannst du dir nicht vorstellen wie ein Multilinguales System realisiert wird? Und stimmt, nur Noobs informieren sich per Google über Probleme, die hier in diesem und in tausend anderen Foren schon weitere tausendmal behandelt, und geklärt wurden. Echte Profis erstellen noch den Tausendundersten Thread gell

Quote:
Es gibt 2 Varianten, wie ich das gerne (je nach Art der Website) löse:

Aber zuerst einmal allgemein wie man die Sprache des Users bekommt, dazu benutze ich gerne eine Mischung aus Cookie bzw. Request-Parameter und Browser-Erkennung:
Leider sind beide von dir vorgestellten Beispiele nicht empfehlenswert. Die erste Variante ist zwar wenn man es aus rein theoretischer Sicht betrachtet in Ordnung, allerdings ist das Codebeispiel das du geliefert hast nicht gerade das Gelbe vom Ei. Die $_REQUEST Superglobale ist längst veraltet und sollte nichtmehr verwendet werden, Sprachen werden meistens (nicht immer aber meistens) nicht durch zwei Zeichen definiert sondern durch fünf (de_DE, en_US, en_EN) da viele Sprachen zwar auf dem ersten Blick die selben sind, sich aber trotzdem unterscheiden (Wie in meiner Aufzählung amerikanisches und britisches Englisch), was wiederrum dein Argument bezüglich das akzeptieren ungefilterter Nutzereingaben negiert. Wiegesagt, du kannst es so machen, ist allerdings wenn du auf gewisse Dialekte (wie im Beispiel USA, und Großbritanien) achten möchtest eher unüblich. Wenn ich mich nicht irre ist das sogar genau das was HTTP_ACCEPT_LANGUAGE beinhaltet.

Quote:
Dadurch kannst du die Websiten auch unterschiedlich gestalten, je nachdem welche Sprache sie sind, vielleicht gibt es für deutschsprachige User ja andere Angebote als für englischsprachige.
Mal von der Tatsache abgesehen das es vollkommener Humbug ist soetwas direkt per verschiedenen Viewfiles zu machen, anstelle per PHP die verwendete Sprache abzufragen müsstest du bei dieser Variante jedesmal wenn du eine kleine Änderung im Layout vornehmen wollen würdest zwei Dateien editieren.

PHP Code:
$_LANGUAGE['home']="Willkommen liebe User"
Was denkst du was der Grund ist wieso man üblicherweise Variablen per Underscore oder Camel-Case definiert, und nicht im Format $_FOOBAR? Superglobalen wie $_POST, $_GET oder $_REQUEST sind von PHP vordefinierte Variablen, und extra so exotisch benannt damit kein Konflikt in deinem Script entsteht. Stell dir vor PHP führt irgendwann eine Superglobale namens $_LANGUAGE ein. Was passiert? Alle deine Scripte werden nutzlos, deine Arbeit war Umsonst, und eventuelle Kunden (falls den welche hast, oder in Zukunft haben wirst, falls du beruflich in diese Richtung gehen willst) sind tierisch angepisst. Wenn du deine Variablen so benennen möchtest dann achte darauf das es Phrasen sind bei denen es vollkommen außer Frage steht das sie jemals belegt werden (den $_LANGUAGE liegt in meinen Augen absolut im Rahmen des möglichen), verwende zwei Unterstriche, oder benenne solche Variablen einfach anders.

Quote:
Ich persönlich finde Arrays für Multi-Language ist kein guter Stil.
Dann nimm halt ne stdClass PHP bietet leider nicht viele Alternativen, ich finde Arrays auch nicht schön, ist aber einfach und relativ effektiv.
Fratyr is offline  
Old 09/07/2012, 22:45   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,904
Received Thanks: 25,394
Ich meinte Shadow.
MrSm!th is offline  
Reply


Similar Threads Similar Threads
[B] MW3 Multi Language Key [S] BF3 RU/EU Key
06/02/2012 - Trading - 0 Replies
Topic.
[B] BF3 Multi Language Key
01/25/2012 - Steam Trading - 3 Replies
Biete hier meinen Battlefield 3 Multi Language (keine RU Key) Standard Version zum verkauf an. Ich nehme PSC,E Gold oder WoW Gold auf Eredar-Horde an. Bei Interesse stehe ich euch in Skype zu verfügung.Einfach pn oder post
[B] BF3 Multi Language Key
01/22/2012 - Steam Trading - 0 Replies
Biete hier meinen Battlefield 3 Multi Language (keine RU Key) Standard Version zum verkauf an. Ich nehme PSC,Überweisung oder WoW Gold auf Eredar-Horde an. Bei Interesse stehe ich euch in Skype zu verfügung.Einfach pn oder post
[B] BF3 Multi Language Key
01/01/2012 - Metin2 Trading - 1 Replies
Biete BF3 Multi Language KEy. Ich werde ihn über Teamviewer aktivieren damit es keine Probleme gibt. Ich suche eine PSC oder Wow Game Time.
[B] BF3 Multi Language Key
01/01/2012 - Origin Trading - 1 Replies
Biete BF3 Multi Language KEy. Ich werde ihn über Teamviewer aktivieren damit es keine Probleme gibt. Ich suche eine PSC oder Wow Game Time.



All times are GMT +2. The time now is 13:03.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.