PHP Setlocale?

Hallo Community,
bin noch etwas frisch hinter den ohren mit PHP.
Ihr kennt das auh ihr seid auff einer Homepage mit der endung
"index.php?locale=de_DE"
Die seite wird auf deutsch angezeigt.
nun gibt mann einfach
"index.php?locale=en_GB"
ein und es wird auf eglisch angezeigt.

Nun wollte ich sowas auch machen und habe direkt mal google angeschmissen.
Ich habe codes gefunden aber jedoch kann ich mit ihnen nix anfangen.
Kann mir einer ein Code mit erklärung posten oder mir helfen ?

Danke im Voraus.

Hinweis: Das hat mit dem, was die Funktion setlocale macht, nichts zu tun. (Bzw. kaum, denn die ist höchstens dafür da, wie bestimmte Ausgaben wie Datums-, Währungsangaben gemacht und Zahlen dargestellt werden.)

Wenn du danach gesucht hast, ist es also kein Wunder, wenn du nichts brauchbares gefunden hast.

Versuch’s mal mit Google: webseite sprache wechseln php o.ä.

ok ich habe was gefunden
wenn es jemand interressiert
link
http://www.php.de/php-tipps-2005-2/30361-sprache-einer-seite-wechseln.html

Edit: naja wirklcih helfen tut es nich
habe nun 3 dateien erstellt
eine index.php eine de.php und eine en.php
hier mal die codes
index.php

[code]

<? if(!isset($lang)){ $lang = "de"; include("de.php"); } else { if($lang = "de"){ include("de.php"); } if($lang = "en"){ include("en.php"); } } echo $anytext; echo ''.$link_home.''; ?>[/code]

de.php

<?php
// inhalt von de.php
$link_home = "Home";
$anytext     = "Willkommen :D";
?> 

en.php

<?php
// inhalt von en.php
$link_home = "Home";
$anytext     = "Welcome :D";
?> 

Wenn ich nun auf index.php?lang=de gehe zeigt der auf deutsch an
gehe ich auf index.php?lang=en zeigt der auch deutsch an
was ist in dem code falsch ?

Du überprüfst bei der falschen Variable, ob sie existiert :slight_smile:

if(!isset($_GET['lang'])){ /*...*/ }else{ $lang=$_GET['lang'];

Es ist nicht so, dass Elemente aus $_GET oder $_POST direkt als Variablen umgesetzt werden.

Also ich könnte sagen wie ichs damals bei meiner bToolBox hatte :wink:
system.php<?php $lang = 'en'; if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $lang = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); $lang = explode(';',$lang[0]); $lang = explode('-',$lang[0]); $lang = $lang[0]; } if(!empty($_GET['lang'])) { $lang2 = $_GET['lang']; if($lang2 == 'de' or $lang2 == 'en') { $lang = $lang2; } } switch($lang) { case 'de': if(!defined('PAGE')) { if(@include('lang/de.php')) { define('lang',TRUE); } } else { if(@include('lang/links_de.php')) { @require('lang/de.php'); define('lang',TRUE); } } break; default: if(!defined('PAGE')) { if(@include('lang/en.php')) { define('lang',TRUE); } } else { if(@include('lang/links_en.php')) { @require('lang/en.php'); define('lang',TRUE); } } } ?>en.php[code]<?php

PORTAL

$Portal_Titel = ‘Main Page (Portal)’;
#$Portal_News = ‘Unfortunately, the service of michi1234 currently offline. Therefore, there is no performance indicator for the status
(http://piripiri014.mein-webperoni.de/bplaced)’;
$Portal_News = ‘

04.11.2008 - 17:58: Status Online Pics now back. Thanks to wlfs
21.10.2008 - 01:45: Sry people … but the bplaced server status images show currently unable server load, as michi1234 it probably will not need to have the API available to me or the current link to send.

I am therefore forced an own status script to create, but may take a while since I may be the earliest start in 1.5 weeks.
04.10.08 - 19:54: 2 new status styles.
’;
$Portal_Content[0] = ‘Welcome to’;
$Portal_Content[1] = ‘Currently bToolBox underconstruction

But… im sorry i can not realy work on it… becouse i have no time to do that.



Currently useable:

+ Who i am? (The Idea is not my… it is from michi1234, original: here)



Features that will be come:

+ Server Status (as a Pic of one or of all Servers)

+ Automatic Backup and Statistics (autobackup script whit stats and other)

+ bplaced Banner, in order to support bplaced

+ Useful free programs (FTP Program, etc)
’;
$Portal_Content[2] = ‘Yours sincerely,

White-Tiger (René Schümann)

last edit: ‘.date(“d.m.y - g:i:sa”, getlastmod()).’’;
$Portal_Content[3] = ‘

At present there are only a JavaScript version of this page.

So you must if you want to use all functions, JavaScript must be enabled for this page.


Alternatively, there is the “server which I am” query here from michi1234.’;
$Portal_Footer = ‘This site is a user side of free webspace sponsor’;

WHOiAM

$WHOiAM_Titel = ‘Who I Am’;
$WHOiAM_Content[0] = ‘On what’;
$WHOiAM_Content[1] = ‘server are you?’;
$WHOiAM_Content[2] = ‘find it out ;)’;
$WHOiAM_Content[4] = ‘Please insert your’;
$WHOiAM_Content[5] = ‘user name.’;
$WHOiAM_Content[6] = ‘show server’;

STATUS

$Status_Titel = ‘bplaced server status’;
$Status_Content[0] = ‘Here you can find the status of the bplaced server and the code to include in your Page.’;
$Status_Content[1] = ‘Display Type’;
$Status_Content[2] = ‘Preview’;
$Status_ShowType[0] = ‘Pic’;
$Status_ShowType[1] = ‘Text (iFrame)’;

MybSs

$MybSs_Titel = ‘My bplaced Server Status (MybSs)’;
$MybSs_Content[0] = ‘Do you want to know "is my bplaced server online?"

Alright… you find it here :wink:


’;
$MybSs_Content[1] = ‘Please insert you bplaced user name or own domain (whit http:// or www.)
’;
$MybSs_Content[2] = ‘Show status’;
?>[/code]links_en.php<?php $lnk_whoiam = 'Who i am?'; $lnk_status = 'Status'; $lnk_kontakt = 'contact <span style="color:#FF0000;">(coming soon)</span>'; ?>

sollte man so aber net unbedingt übernehmen^^ Es wären noch einige Verbesserungen möglich xD [size=85](z.B. statt dem statischen also ‘lang/links_en.php’ das ganze dynamisch machen ‘lang/links_’.$lang.’.php’ etc.)[/size]
Wollte halt nur ma sagen wie ichs hatte xD
btw. ignoriert mein englisch xD

[quote=“Flocke”]Du überprüfst bei der falschen Variable, ob sie existiert :slight_smile:

if(!isset($_GET['lang'])){ /*...*/ }else{ $lang=$_GET['lang'];

Es ist nicht so, dass Elemente aus $_GET oder $_POST direkt als Variablen umgesetzt werden.[/quote]
Sry bin bissle dumm kannnste mir die fertige index posten ? xD

@ white tiger ich weiß nnicht ob ich so dumm bin aber irgendwie wenn ich dein code benutzt bleibt meine seite weiß. habe natürlich auch ein ordner lang angelgt und en.php, de.php usw da rein gelegt

[code]<?php
if(!isset($_GET[‘lang’])){ //wenn keine Sprache angegeben wird automatisch de nehmen
$lang = “de”;
include(“de.php”);
} else {
$lang =$_GET[‘lang’]; //Sprachauswahl anhand der Endung
if($lang == “de”){
include(“de.php”);
}
elseif($lang == “en”){
include(“en.php”);
}
else { // wenn nicht vorhandene Sprache angegeben (recht unwahrscheinlich), de aufrufen
$lang = “de”;
include(“de.php”);
}
}

echo $anytext;

echo ‘’.$link_home.’’;

?>[/code]

je nach anzahl der sprachen gestaltet sich sowas mit switch übersichtlicher

nochwas: wenn du Variablen vergleichst kommt ein == dazwischen, = nutzt man für Zuweisungen.

cool danke jetzt geht es endlich :smiley:

[quote=“darkicewow”][…]
@ white tiger ich weiß nnicht ob ich so dumm bin aber irgendwie wenn ich dein code benutzt bleibt meine seite weiß. habe natürlich auch ein ordner lang angelgt und en.php, de.php usw da rein gelegt[/quote]Naja… entweder haste was falsch angepasst, oder aber in der en.php etc. etwas falsch drinn^^ Die Art und weise wie ich den Include Prüfe hat den Nachteil das alle Fehler in der includeten Datei komplett abgestellt werden.
Kannst ja mal die @s vor “include” und “require” wegnehmen [size=85](falls du “include/require” noch drin hast)[/size]

Nachtrag [size=85](@ 5:12 AM)[/size]:
müsste ich jetzt nen gutes size=85[/size] und dennoch flexibles Lang system erstellen, würds ungefähr so aussehn:

<?php $lang = 'xx'; ///////////////// $_lang = array(); if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) foreach(explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']) as $tmplang) { $tmplang = explode(';',$tmplang); $tmplang = $tmplang[0]; // if(preg_match('/^[\w-]*$/',$tmplang) && is_file(__DIR__.'/.lang/'.$tmplang.'.lang.php')) if(strpos($tmplang,0x2f) === FALSE && strpos($tmplang,0x5c) === FALSE && is_file(__DIR__.'/.lang/'.$tmplang.'.lang.php')) { $lang = $tmplang; break; } } define('LANG_DEF',$lang); require(__DIR__.'/.lang/'.LANG_DEF.'.lang.php'); if(!empty($_GET['lang'])) { $tmplang = strtolower($_GET['lang']); // if(preg_match('/^[\w-]*$/',$tmplang) && is_file(__DIR__.'/.lang/'.$tmplang.'.lang.php')) if(strpos($tmplang,0x2f) === FALSE && strpos($tmplang,0x5c) === FALSE && is_file(__DIR__.'/.lang/'.$tmplang.'.lang.php')) { $lang = $tmplang; } } define('LANG',$lang); if(LANG != LANG_DEF) { // define('LANG_LNK','lang='.LANG); require(__DIR__.'/.lang/'.LANG.'.lang.php'); } // else // define('LANG_LNK',''); define('LANG_LNK','lang='.LANG); function lang($id) { global $_lang; if(isset($_lang[LANG][$id])) return $_lang[LANG][$id]; elseif(isset($_lang[LANG_DEF][$id])) return $_lang[LANG_DEF][$id]; return '|lang error|'; } function langx($id) { global $_lang; $args=func_num_args(); $str = Null; if(isset($_lang[LANG][$id])) $str = $_lang[LANG][$id]; elseif(isset($_lang[LANG_DEF][$id])) $str = $_lang[LANG_DEF][$id]; else return '|lang error|'; for($i=1;$i<$args;$i++) { $str = str_replace('%'.$i.'%',func_get_arg($i),$str); } return $str; } ?>
Beispiel: test.white-tiger.xe.cx/lang.inc.php [size=85](bei mir ists z.B. automatisch auf English, default ist übrigens xx nur wird das vermutlich niemand bekommen solange man EN oder DE als Sprache hat^^)[/size][code]<!doctype html>

<?php if(isset($_GET['op'])) { echo ''.lang(200).' body{margin:0;} a img{border:0;}
DE|EN
'.lang(202).lang(203).''.lang(101).''; } else { echo ''.lang(100).' body{margin:0;} a img{border:0;}
DE|EN
'.lang(102).date(lang(10)).lang(103).date(lang(11)).lang(104).langx('test_langx',1,2,lang('test_langx_3'),4,5,6,7,8,lang('test_langx_9'),10,lang('test_langx_damn')).lang('donno').lang('op').''.lang(201).''.lang('btw_vaild'); } ?> [/code]Ne Sprach Datei sieht z.B. so aus:[code]<?php // GLOBAL (everywhere needed, not just for one page eg. $_lang[$lang][10]='D, d M Y'; $_lang[$lang][11]='h:i:s A'; // Main Page $_lang[$lang][100]='Main Page'; $_lang[$lang][101]='click to go to "Main Page"'; $_lang[$lang][102]='Welcome to this demonstration :P
Today is: '; $_lang[$lang][103]=' and it\'s '; $_lang[$lang][104]='
'; $_lang[$lang]['donno']='I don\'t know what i should say now (or better write)... maybe just nothing at all :D
'; $_lang[$lang]['op']='
Just test another page^^
'; $_lang[$lang]['btw_vaild']='
btw... this page is vaild HTML5 :cool:
'; // Other Page $_lang[$lang][200]='Other Page'; $_lang[$lang][201]='click to go to "Other Page"'; $_lang[$lang][202]='THIS IS OTHERPAGEAAAAAAAAAAAAAAAAAAAA!
'; $_lang[$lang][203]='
¿WTF? let\'s get the hell outta here!
'; // Tests $_lang[$lang]['test_langx_3']='three'; $_lang[$lang]['test_langx_9']='nine'; $_lang[$lang]['test_langx_damn']='ah fuck off!'; $_lang[$lang]['test_langx']='
lang_ext(\'langx\', %1%, %2%, \'%3%\', %4%, %5%, %6%, %7%, %8%, \'%9%\', %10%, %1%%1%, %2%%1%... %11%)
'; ?>[/code]in der Deutschen fehlt z.B. [i]202[/i] und [i]'test_langx'[/i] wesshalb das englische genommen wird. Wie gesagt das hier ist nen erweiterbares System daher teils doch recht Komplex^^ Ich, für mich, würde eigentlich immer eher Statisch arbeiten... daher keine "Default" Sprache als Fallback, demnach auch keine Funktion sowie das laden 2er Sprachen etc. Wobei [i]langx()[/i] doch recht nützlich ist wenn man etwas einfügen will und die Position net immer gleich ist :wink: Ansonsten muss man sich halt auch entscheiden, [ul][li]ob man die alternativen LANG_LNKs möchte daher wenn nicht extra ausgewählt, das die Links "neutral" bleiben. [size=85](also unverändert, ohne lang=)[/size][/li] [li]Oder die Alternative Sicherheitsprüfung mit nem Regulären Ausdruck der nur A-Z sowie _ und - erlaubt, wobei "/" sowie "\" prüfen reichen sollte, solange ich nichts übersehn / überdacht hab xD[/li][/ul]

@darkicewow
versuch durchzusteigen xD Wobei das kein großes Problem sein sollte.
An dem Example solltest du dich net unbedingt zu sehr orientieren^^ Zahlen als "id"s dürften schneller sein als Strings, nicht nur weil weniger zu parsen ist :stuck_out_tongue: Jedoch kann man halt auch Strings nutzen was für uns Menschen wiederum einfacher ist :stuck_out_tongue:
Wobei ein Language System allgemein die Übersichtlichkeit reduziert, außer man hat eines wie bei Miranda z.B. [size=85](miranda-im.de/mediawiki/index.ph … atei:XFire)[/size] bei welchem der komplette Text an eine Funktion übergeben wird, die falls vorhanden die Übersetzung ausspuckt und ansonsten das ganze unverändert.
Allerdings ist dies net wirklich performant weshalb es dann leider weg fällt, eben weil es Übersichtlich ist xD

PS: Verbesserungsvorschläge gerne genommen, immerhin ists spät demnach eventuell etwas verpeilt oder man kann etwas allgemein verbessern z.B. im Sinne Geschwindigkeit etc.
PPS: dat Beispiel isn Beispiel, ignoriert es xD

Joomla macht es genauso. (Natürlich kann man auch kürzere Strings als Schlüssel verwenden)

Joomla macht es genauso. (Natürlich kann man auch kürzere Strings als Schlüssel verwenden)[/quote]Gut zu wissen xD Ein Grund mehr kein Joomla zu nutzen :stuck_out_tongue: [size=85](wobei ich vermutlich eh nie nen CMS brauch da ichs selber mach)[/size]

Wie gesagt… es ist zwar verdammt unübersichtlich mit Zahlen, dafür aber Performance technisch [size=85](so hoffe ich xD)[/size] am besten. Sooo schlimm ists ja auch net in der Sprachdatei herumzustochern xD Mich stört es ehrlich gesagt schon bei Miranda und das ist nun ma nen Programm in C/C++ ^^ Soll heißen sowieso ums x fache schneller als ne Scriptsprache wie PHP…
Dazu kommt das es nicht nur Schneller in der Ausführung ist, sondern auch das es weniger RAM verbraucht.

Edit:
wobei mir gerade eine Sache einfällt, die übersichtlich ist, und zugleich Performant… wie wäre es mit nem Compiler/Preprocessor für PHP :stuck_out_tongue:
Soll heißen aus: lang(‘some English text’) wird lang(0x42D9A800), so das man das Script einmal durch den Preprocessor Jagd und man es so hochläd, das Script an dem man Arbeitet jedoch ist mit Texten^^ Dann kann man es zum testen mit Texten nutzen und wenn man Fertig ist jagd man es wieder durch den Preprocessor oder aber das geht automatisch wenns auf dem Space ist^^ [size=85](halt 1x^^)[/size]

Danke für eure Hilfe :smiley:

Habs hinbekommen :smiley: :smiley: