[PHP] Zmiana języka

0

Witam,
ponieważ nikt nie chciał dalej odpisać na mój temat, możliwe że to dlatego że widział ilość wypowiedzi, więc jeszcze raz zakładam ten temat ale oczywiście powiem wszystko od nowa wraz ze zmianami.

Oto stary temat:
http://4programmers.net/Forum/viewtopic.php?id=116862

Proszę o zamknięcie starego tematu.


Chodzi mi o to że napisałem skrypt który ma zmieniać język strony, ale podczas zmiany za pierwszym razem wszystkie napisy zamieniają się w dużą literę A, natomiast po 2 odświerzeniu wyświetla odpowiedni język. Nie wiem co narozrabiałem.

Oto główny plik:

<?
session_start(); 

if(!isset($_SESSION['Lang'])){
   $_SESSION['Lang'] = 'Polski';
}

$langGET = $_GET['lang'];

if($langGET != ""){
   if(is_file("lang/$langGET.php")){
	$_SESSION['Lang'] = $langGET;
   }
}


include("head.php");
require("lang/".$_SESSION['Lang'].".php");


$page = $_GET['page'];

print(iso("
<a href=\"index.php\">".$lang['Logowanie']."</a>"));

if(!isset($_SESSION['$session_all'])){
print(iso("
 || <a href=\"index.php?page=Rejestracja\">".$lang['Register']."</a>"));
}

print(iso("
 || <a href=\"index.php?page=$page&lang=Polski\"><img src=\"images/flagi/pl.png\" border=0></a>
&nbsp<a href=\"index.php?page=$page&lang=English\"><img src=\"images/flagi/en.png\" border=0></a>
<br><br>
<br><br>"));

if($page != ""){
include("include/$page.php");
} else {
include("include/logowanie.php");
}
?>

A to plik head.php:

<? include("config.php"); ?>
<? include("function.php"); ?>
<? header("Content-Type: text/html; charset=iso-8859-2"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<? include("JavaScript.php"); ?>

<html>
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
<meta http-equiv="Content-Style-Type" content="text/css">

<meta name="Reply-to" content="[email protected]">
<meta name="Keywords" content="tibia, ots, otserver, otserwer, server, serwer, wydra">
<meta name="Description" content="Wydra OTServer - dbamy o naszych graczy :)">
<meta name="Author" content="Marcin Wyrodow-Rakowski">
<meta name="Robots" content="ALL">

<link rel=stylesheet href="style.css" type="text/css">
<script language="JavaScript" src="CarTinq.js" type="text/javascript"></script>

</head>

<body leftmargin="10" topmargin="0" rightmargin="10" marginwidth="10" marginheight="0" link="#FFFFFF" vlink="#FFFFFF" alink="#FFFFFF">

Natomiast to jest podany szablon jak wygląda plik Polski.php:

<?
$lang['Napis'] = 'Napis';
?>

Proszę nie przyczepiać się do tego że mam jakieś proste błędy nie związane z tematem, tylko pomóc mi z tym.

Bardzo proszę o pomoc i pozdrawiam, Atverstyt

0

Wszystko ok i pieknie, ale gdzie w tym kodzie jest jakas 'zmiana'? Skrypt zmienia domyslny jezyk na jakis inny, zmienia teksty w jezykach czy co? Co znaczy ta 'zmiana'? Podales cos, co mozna uznac za naglowek strony i co oprocz paru poczatkowych linijek w glownym pliku nie ma nic wspolnego z jezykiem. Chyba, ze ja jestem slepy.

//edit
ok, chyba cos czaje z tego. Chodzi Ci, ze jak klikasz we flagi to sie jezyk nie zmienia? Rozumiem, ze wszystkie napisy, ktore maja byc wielojezykowe zamieniaja sie na litere A?

0

Dokładnie tak. Jak klikam na flagę najpierw sa literki A, za drugim razem(odświeżeniem a nie kliknięciem na flage) zmienia sie na to co mialo byc.

Prosze sprawdzić kod a zauwazysz jak dziala.

0

hmm... Czy ktoś mi pomoże z tym? A może nie powinno być to w newbie??

0

Podaj jeszcze kawalek page.php, zeby bylo wiadomo w jakis sposob wyswietlasz napisy. Jak bede mial chwile to sie przyjrze. Chwilowo brak czasu.

0

skoro chcesz żeby ktoś przed odpowiedzeniem ci to najpierw przetestował (co jest imo szczytem czegoś na b) to daj pełny skrypt (najlepiej link do zipa) który da się uruchomić a poza tym pokaż że próbujesz coś zrobić

jakbyś nauczył się debugować to byś to zrobił już zanim byś napisał pierwszego posta, więc pokaż że próbujesz i pokaż jakieś kluczowe wartości w odpowiednich miejscach przed i po odświeżeniu

0

masz cały plik index.php i cały head.php

A wyświetlane jest w ten sposób (kawałek kodu):

<?
print '<form action="'.getenv(REQUEST_URI).'" method=post>
<table border="0" width="120" cellspacing="0" cellpadding="0">
  <tr>
    <td width="120" height="25">'.$lang['Napis'].':</td>
  </tr>
</table>
&nbsp;
</form>';
?>

A w dodatku to nie jest page.php tylko $page.php co jest wielką różnicą.

0

Tylko że ten kod działa poprawnie. Błąd musisz mieć chyba w funkcji iso. Jako ze jej nie podałeś, napisałem sobie funkcję
function iso($t){return $t;} i nie zamienia mi nigdzie na żadne A.

0

a w ogóle po co ta funkcja ? zamienia napis na iso-8859-2 ? jak tak to czemu nie pisać od razu kodu w tym standardzie ?

0

Więc tak,
zrobiłem oddzielny katalog w którym umieściłem:

  • head.php:
<? header("Content-Type: text/html; charset=iso-8859-2"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<body leftmargin="10" topmargin="0" rightmargin="10" marginwidth="10" marginheight="0" link="#000000" vlink="#000000" alink="#000000">
  • index.php (usunąłem funkcje iso)
<?
session_start();

if(!isset($_SESSION['Lang'])){
   $_SESSION['Lang'] = 'Polski';
}

$langGET = $_GET['lang'];

if($langGET != ""){
   if(is_file("lang/$langGET.php")){
        $_SESSION['Lang'] = $langGET;
   }
}


include("head.php");
require("lang/".$_SESSION['Lang'].".php");


$page = $_GET['page'];

print("
<a href=\"index.php\">".$lang['Logowanie']."</a>");

if(!isset($_SESSION['$session_all'])){
print("
 || <a href=\"index.php?page=Rejestracja\">".$lang['Register']."</a>");
}

print("
 || <a href=\"index.php?page=$page&lang=Polski\"><img src=\"images/flagi/pl.png\" border=0></a>
&nbsp<a href=\"index.php?page=$page&lang=English\"><img src=\"images/flagi/en.png\" border=0></a>
<br><br>
<br><br>");


print '<form action="'.getenv(REQUEST_URI).'" method=post>
<table border="0" width="120" cellspacing="0" cellpadding="0">
  <tr>
    <td width="120" height="25">'.$lang['Napis'].':</td>
  </tr>
</table>
&nbsp;
</form>';

?>
  • zrobiłem katalog lang w którym jest Polski.php i English.php

Odpalam i nadal to samo. Ta literka którą podaje to (jak mamy):

<?
$lang['Logowanie'] = 'logowanie';
$lang['Register'] = 'rejestracja';
$lang['Napis'] = 'napis';
?>

Jest to pierwsza litera ostatniej zmiennej, czyli "n".

Ostatnia zmienna:

$lang['Napis'] = 'napis';

Pierwsza litera:
napis


No i nadal nic sie nie dzieje. Myslalem ze moze to przez WebServ (program). Więc wrzucam na ftp'a i nadal dupa...

Prosze o dalszą pomoc, albo rade jak powinno byc to wszystko napisane.

0

Ależ to działa zarówno u mnie lokalnie jak i na zdalnym serwerze.
Proof: http://btdev.eu/test/ - dokładnie te pliki które podałeś.

<font size="1">Z malutkimi zmianami, żeby notice'ami nie sypało:</span>

$page = isset($_GET['page'])?$_GET['page']:'';
//oraz
$langGET = isset($_GET['lang'])?$_GET['lang']:'';
//oraz
getenv('REQUEST_URI')
0

Mam do Ciebie prośbę. Możesz spakować całą zawartość do jakiegoś .rar lub .zip i mi dostarczyć? Choćby na mail:[email protected]

U mnie nie działa ani na WebServ, ani na home.pl

Chyba że w kodzie mam mały błąd którego nie widze...

Bardzo prosze o to, wtedy bede mogl porównać moje błędy.

0

odnawiam temat. Nav prosze spakuj to i wrzuc na serwer a sciagne to.

Widze ze wysylanie nie dziala. Pozdrawiam i czekam

0

Nie mam zbytnio czasu się temu przyglądać, ale jedną rzecz zauważyłem...

$langGET = $_GET['lang'];

if($langGET != ""){
   if(is_file("lang/$langGET.php")){
        $_SESSION['Lang'] = $langGET;
   }
}

Tu nie ma żadnej kontroli danych, pomyśl sobie co by było gdyby ktoś tam w parametrze lang wartość ../index

I zamiast linijki

if(is_file("lang/$langGET.php")){

bardziej polecałbym formę:

if(is_file("lang/" . $langGET . ".php")){
0

Nadal nie działa.

Nav widzę że nie możesz wysłać więc prosze napisz tutaj całą zawartość plików. To dla mnie ważne jest gdzie mam błąd.

0

./index.php

<?
session_start();

if(!isset($_SESSION['Lang'])){
   $_SESSION['Lang'] = 'Polski';
}

$langGET = isset($_GET['lang'])?$_GET['lang']:'';

if($langGET != ""){
   if(is_file("lang/$langGET.php")){
        $_SESSION['Lang'] = $langGET;
   }
}


include("head.php");
require("lang/".$_SESSION['Lang'].".php");


$page = isset($_GET['page'])?$_GET['page']:'';

print("
<a href=\"index.php\">".$lang['Logowanie']."</a>");

if(!isset($_SESSION['$session_all'])){
print("
 || <a href=\"index.php?page=Rejestracja\">".$lang['Register']."</a>");
}

print("
 || <a href=\"index.php?page=$page&lang=Polski\"><img src=\"images/flagi/pl.png\" border=0></a>
&nbsp<a href=\"index.php?page=$page&lang=English\"><img src=\"images/flagi/en.png\" border=0></a>
<br><br>
<br><br>");


print '<form action="'.getenv('REQUEST_URI').'" method=post>
<table border="0" width="120" cellspacing="0" cellpadding="0">
  <tr>
    <td width="120" height="25">'.$lang['Napis'].':</td>
  </tr>
</table>
&nbsp;
</form>';

?>

./head.php

<? header("Content-Type: text/html; charset=iso-8859-2"); ?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<body leftmargin="10" topmargin="0" rightmargin="10" marginwidth="10" marginheight="0" link="#000000" vlink="#000000" alink="#000000">

./lang/Polski.php

<?
$lang['Logowanie'] = 'logowanie';
$lang['Register'] = 'rejestracja';
$lang['Napis'] = 'napis';
?>

./lang/English.php

<?
$lang['Logowanie'] = 'login';
$lang['Register'] = 'register';
$lang['Napis'] = 'inscription';
?>
0

nadal nie działa... chyba że jest jeszcze inny powód. Czy macie jakieś php.ini czy coś takiego? Może je mam zdefiniować by dobrze działał?

0

miesiąc i jeden dzień już ciągniesz ten wątek
bez urazy, ale już metodą brute force mogłeś ten problem rozwiązać

proszę, powstawiaj echo lub lepiej var_dump w różne miejsca sprawdzając czy sesja jest aktywna, czy parametr get doszedł i jest poprawny i tego typu rzeczy, wtedy napisz dokładnie (tj. technicznie) co się dzieje lub chociaż napisz jaka jest konfiguracja twojego serwera (zrzut ważniejszych rzeczy z php_info())

0

wątek tak ale patrz na czas odpowiedzi.

Dobrze posiedze nad tym, ale problem jest taki że ten kod działa nav'owi bez zarzutów a ja mam błędy nadal... Dlatego pytam się o php.ini czycoś w tym stylu

1 użytkowników online, w tym zalogowanych: 0, gości: 1