webForumDet fria alternativet

Olika språk på en websida

PHP

14 svar · 20 567 visningar · startad av Fuel

Medlem sedan okt. 20001 285 inlägg
Frågan#1

language_sv.php

<?php
// By Fuel [email]fuel@linux.nu[/email]
// language_sv.php ----------
define("_WELCOME_","Välkommen");
define("_LINUX_","Slackware");
define("_WEBFORUM_","<a href=\"adress\">WebForum</a>");
?>

language_de.php

<?php
// language_de.php ----------
define("_WELCOME_","Villkommen");
define("_LINUX_","Slackware");
define("_WEBFORUM_","Eine kleine forum");
?>

main.php

<?php
// main.php ----------
// på alla dina sidor
// kollar om en kaka är satt
if (isset($_COOKIE['language'])) {
    $lang = $_COOKIE['language'];
} else {
    $lang = "sv";
}

// inkluderar rätt språk fil
$langfile = $_SERVER['DOCUMENT_ROOT']."/language/language_".$lang.".php";
if (file_exists($langfile)) {
    include $langfile;
} else {
    echo "<h2>Hold your horses!</h2>";
    echo "Document language-file is missing!<br />\n";
    echo "<a href=\"http://www.microsoft.com\">Some link</a>";
    exit;
}
?>
<!-- Länkar -->
<a href="/lang.php?action=set_language&type=sv"><img class="lang" src="/images/sv.gif" alt="Svenska" /></a>
<a href="/lang.php?action=set_language&type=de"><img class="lang" src="/images/de.gif" alt="Deutsch" /></a>

lang.php

<?php
// lang.php ----------
// Spara ditt val i en kaka
if ($_GET['action'] == "set_language") {
    setcookie('language',$type,(time()+2592000),'/','',0);
    header ("location: /index.php");
    exit;
}
?>

Dina sidor..

<?php
// index.php ----------
include "main.php";
echo _WELCOME_;
?>
Medlem sedan jan. 20023 327 inlägg
#2

Jag har gjort två ändringar i filen lang.php. Denna fil fungerade inte med "register_globals = off", det är nu fixat. Ändrade också så att man skickas till den sidan man var på när man byter språk. I den förra versionen skickas man alltid till index-sidan.

<?php
// lang.php ----------
// Spara ditt val i en kaka
if ($_GET['action'] == "set_language") {
    setcookie('language',$_GET['type'],(time()+2592000),'/','',0);
    header('Location: '.$_SERVER['HTTP_REFERER']);
    exit;
}
?>
Medlem sedan juni 200032 967 inlägg
#3

Kom dock ihåg att HTTP_REFERER inte alltid har ett vettigt värde, då vissa brandväggar (exempelvis Norton Internet Security) tycker det är skojigt att tömma den headern. Compusas förbättring kommer således inte alltid att fungera. Kanske skall man kontrollera detta med en if-sats, typ:

$loc = $_SERVER['HTTP_REFERER'];
if (empty($loc)) 
      $loc = "/index.asp";
header('Location: '. $loc);

Mvh

Medlem sedan okt. 20001 285 inlägg
#4

Updaterat

inga större förändringar .. lite småfixat & så.. typ

header.php

<?

// --------------------
// header.php
// --------------------

 if ($_COOKIE['language']) {
    $settings = explode("|", $_COOKIE['language']);
	
	$lang = $settings[0];
	$charset = $settings[1];
} else {
    $lang = "sv";
    $charset = "ISO-8859-1";
}

// inkluderar rätt språk fil
$langfile = $_SERVER['DOCUMENT_ROOT']."/language/language_".$lang.".php";
if (file_exists($langfile)) {
    include $langfile;
} else {
    echo "<h1>Error!</h1>\n";
    echo "<h2>Document language-file is missing!</h2>\n";
    echo "<p>Contact webmaster : <a href=\"mailto:webmaster@microsoft.com?subject=Language\">here</a></p>";
    exit;
} 

if ($_COOKIE['style']) {
    $css = $_COOKIE['style'];
} else {
    $css = "standard";
}

if (stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")) {
    header("Content-type: application/xhtml+xml; charset=" . $charset);
    echo "<?xml version=\"1.0\" encoding=\"" . $charset . "\"?>\n";
    echo "<?xml-stylesheet href=\"/styles/" . $css . ".css\" type=\"text/css\" media=\"screen\"?>\n";
    echo "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n";
    echo "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"" . $lang . "\">\n";
    echo "<head>\n";

} else {
    header("Content-type: text/html");
    echo "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">\n";
    echo "<html lang=\"" . $lang . "\">\n";
    echo "<head>\n";
    echo "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . $charset . "\" />\n";
    echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/" . $css . ".css\" />\n";
}
?>
<title>domain dot com</title>

</head>
<body>
	
	<ul>
		<li><a href="/lang.php?action=set_language&type=sv">Svenska</a></li>
		<li><a href="/lang.php?action=set_language&type=de">Deutsch</a></li>
                <li><a href="/lang.php?action=set_language&type=en">English</a></li>
	</ul>

lang.php

<?

// --------------------
// lang.php
// --------------------

if ($_GET['action'] == "set_language") {
	
	switch ($type)
	{
		case "de":
			$my_lang = "de";
    		$my_charset = "ISO-8859-1";
    		break;
    	case "en":
			$my_lang = "en";
    		$my_charset = "UTF-8";
    		break;
    	case "sv":
    		$my_lang = "sv";
    		$my_charset = "ISO-8859-1";
    		break;
    	deafult:
    		die("No such language!";
    }
    
    $lang_settings = $my_lang . "|" . $my_charset;
    
    setcookie('language',$lang_settings,(time()+2592000),'/','',0);

    $loc = $_SERVER['HTTP_REFERER'];
    if (empty($loc)) {
        $loc = "/lang.php";
    }

    header('Location: '. $loc);
    exit;
    
} else {
	
	include "includes/header.php";

	echo "<p>" . _LANGUAGE_ . "</p>";

	include "includes/footer.php";
}
?>

Dina sidor..

<?

// --------------------
// index.php
// --------------------

include "includes/header.php";

echo "<h2>" . _WELCOME_ . "</h2>";

?>

<?

include "includes/footer.php";
?>

Alla filer finns med i rar filen, bara att packa upp & testa. Jag har själv dock inte testat :) reservation för småfel..

Edit: ehum.. har redan "glömt" lite som nu fattas i rar-filen, bl.a att kunna välja engelska i header.php och @nders redirect i lang.php .. men .. wtf .. det här är ändå mest ett exempel som kan vara en grund att spinna vidare på.

Medlem sedan juli 20041 271 inlägg
#5

Försökte använda Fuels lösning, men något strular.

Parse error: parse error, unexpected ':' in /home/var/*****/lang.php on line 23

Line 23:

    	deafult:  //<--- detta som strular
    		die("No such language!";

    }

Jag kanske har missat något? :q

Medlem sedan jan. 20023 327 inlägg
#6
    	deafult:  //<--- detta som strular
    		die("No such language!");

    }

En missad slutparentes.

Medlem sedan juni 20008 205 inlägg
#7

Plus att det stavas "default"... ;)

Medlem sedan jan. 20023 327 inlägg
#8

Inte många rätt m.a.o. ;)

Medlem sedan juli 20041 271 inlägg
#9

------------

Medlem sedan juli 20041 271 inlägg
#10

Tack för hjälpen.

Men jag måste ha missat något mer för jag får bara "No such language!" hela tiden. :r

Här är koden i lang.php

<?php

// --------------------
// lang.php
// --------------------

if ($_GET['action'] == "set_language") {
	
	switch ($type)
	{
		case "de":
			$my_lang = "de";
    		$my_charset = "ISO-8859-1";
    		break;
    	case "en":
			$my_lang = "en";
    		$my_charset = "UTF-8";
    		break;
    	case "sv":
    		$my_lang = "sv";
    		$my_charset = "ISO-8859-1";
    		break;
    	default:
    		die("No such language!");

    }
    
    $lang_settings = $my_lang . "|" . $my_charset;
    
    setcookie('language',$lang_settings,(time()+2592000),'/','',0);

    $loc = $_SERVER['HTTP_REFERER'];
    if (empty($loc)) {
        $loc = "/lang.php";
    }

    header('Location: '. $loc);
    exit;
    
} else {
	
	include "includes/header.php";

	echo "<p>" . _LANGUAGE_ . "</p>";

	//include "includes/footer.php";
}
?>
Medlem sedan juni 20014 421 inlägg
#11
switch ($_GET['type'])
Medlem sedan juli 20041 271 inlägg
#12

colione skrev:

switch ($_GET['type'])

Det verkade fungera bättre. :e
Ska pilla lite med detta nu ett tag. Hör av mig om det strular igen.

Medlem sedan jan. 20086 inlägg
#13

Automatisk

<?php 
// main.php ---------- 
// på alla dina sidor 
// kollar om en kaka är satt 
if (isset($_COOKIE['language'])) { 
    $lang = $_COOKIE['language']; 
} else { 
    $lang = "sv"; 
} 

// inkluderar rätt språk fil 
$langfile = $_SERVER['DOCUMENT_ROOT']."/language/language_".$lang.".php"; 
if (file_exists($langfile)) { 
    include $langfile; 
} else { 
    echo "<h2>Hold your horses!</h2>"; 
    echo "Document language-file is missing!<br />\n"; 
    echo "<a href=\"http://www.microsoft.com\">Some link</a>"; 
    exit; 
} 
?> 
<!-- Länkar --> 
<a href="/lang.php?action=set_language&type=sv"><img class="lang" src="/images/sv.gif" alt="Svenska" /></a> 
<a href="/lang.php?action=set_language&type=de"><img class="lang" src="/images/de.gif" alt="Deutsch" /></a>

På detta vis blir språk alltså svenska men hur eller på vilken sätt kan man ändra kod så att språk på sidan blir den som man har i sin webbläsare samma som har exempel Google, i så fall finns inte den språk som finns på sidan blir exempel svenska som först, kan någon sånt?

Medlem sedan apr. 2006244 inlägg
#14

Vetinte skrev:

På detta vis blir språk alltså svenska men hur eller på vilken sätt kan man ändra kod så att språk på sidan blir den som man har i sin webbläsare samma som har exempel Google, i så fall finns inte den språk som finns på sidan blir exempel svenska som först, kan någon sånt?

Typ så här borde väl gå fint, finns inte rätt språkfil så inkluderar man default språket. Vill man byta språk så anropar man ?lang=annat_språk. Det bygger på HTTP_ACCEPT_LANGUAGE (ex: en/sv/fi/de för engelska/svenska/finska/tyska) så man måste döpa språkfilerna rätt

<?php 
// main.php ---------- 

// inkludera följande funktion på samtliga sidor 

function site_language($lang = NULL) 
{

$lang_dir =  $_SERVER['DOCUMENT_ROOT'].'/language/';

if(isset($_COOKIE['language']) && $lang == NULL) {
 return $_COOKIE['language'];
}
else {
			
 if($lang == NULL) {
  $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
 }
			
 if(file_exists($lang_dir.$lang.'.php') == false) {
	$lang = 'sv'; // default språk
 }
			
 setcookie('language', $lang, time()+31536000, '/');
 return $lang;
}

}

// Inkludera språkfilen
include site_language( (isset($_GET['lang'])) ? $_GET['lang']:NULL )'.php';

?> 
<!-- Länkar --> 
<a href="/lang.php?action=set_language&type=sv"><img class="lang" src="/images/sv.gif" alt="Svenska" /></a> 
<a href="/lang.php?action=set_language&type=de"><img class="lang" src="/images/de.gif" alt="Deutsch" /></a>
Medlem sedan jan. 20086 inlägg
#15

Ja det funkar inte. Hur ska jag döpa språk filerna ska dem heta sv.php eller?
Tack för hjälp.

252 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)