GR or EN???

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

GR or EN???

Δημοσίευση από p_pan » 07 Αύγ 2007 18:11

hello..
exo tin ejhs aporia...
pas se ena site... kai blepeis tin index.php px kai s leei epeleje glosa..
gr or en???
kai epilegis mia pao tis duo..
kai as poume oti epileghs ta ellinika.. tote emfanizete sto address bar to ejhs:
http://www.mysite.com/lan=GR
kai etsi mpeneis sto elliniko site..
an epilejhs to aggliko 8a einai ola agglika... exei kapoio kolpo oste me xrisi php na allazei to keimeno gt kai h upolipes selides einai sta agglika h ellinika antistixa... kai kala me mia get apostelete san metabliti kai etsi ka8e selida exei mia if kai blepei analogos ti exei stilei h proti selida...??
Αγράματος...

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

GR or EN???

Δημοσίευση από Alice_Cooper » 07 Αύγ 2007 18:51

apla exei se metavlites ta menou kai mporei
na pernei apo allh db h alla tables ta txt as poume

afto mou fenetai to poio aplo ....
o kathenas me ton tropo tou :p

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

GR or EN???

Δημοσίευση από p_pan » 08 Αύγ 2007 16:22

ok... kai pos ginete na stilo me mia get mia metablhth apo to site epilogis tis glossas stin selida pou 8a probalete to kurio periexomeno..??

http://www.mysite.gr/index.php?lan=gr

gt to ekana alla tpt.. kai stin selida tis emfaniseis ekana to ejhs:

if ($_GET[lan] == "gr") {
echo "eimai ellinika";}
else{
echo "agglika";}


alla mparoufes mallon kano kati la8os..
Αγράματος...

Άβαταρ μέλους
tix-3-
Δημοσιεύσεις: 827
Εγγραφή: 25 Μαρ 2004 05:12
Τοποθεσία: Θεσσαλονικη-Καβαλα-βεροια(το τριγωνο της καταρας)
Επικοινωνία:

GR or EN???

Δημοσίευση από tix-3- » 08 Αύγ 2007 16:33

Οπως το εκανες δουλευει.
Τωρα εκει που λες ειμαι αγγλικα ελληνικα θα κανεις Include το katallhlo file στο οποιο θα εχεις τα κειμενα σαν μεταβλητες και θα κανει echo $text ας πουμε.
Στο lang_en θα ειναι στα αγγλικα στο lang_gr θα ειναι ελληνικα.
Το lan ειτε θα το μεταφερεις απο σελιδα σε σελιδα ειτε θα το βαζεις στο cookie του ειτε αν εχεις καποιο Login system θα το βαζεις στον πινακα με τους users
Αν δεν υπήρχανε οι κνίτες κι'η ηρωίνη...

Άβαταρ μέλους
_mentos_
Δημοσιεύσεις: 87
Εγγραφή: 20 Ιούλ 2005 21:57
Τοποθεσία: Βύρωνας
Επικοινωνία:

GR or EN???

Δημοσίευση από _mentos_ » 08 Αύγ 2007 16:35

μήπως το πρόβλημα είναι τα "αυτάκια"

Κώδικας: Επιλογή όλων

if ($_GET['lan'] == "gr") {
   echo "eimai ellinika";
} else {
   echo "agglika";
}

Άβαταρ μέλους
p_pan
Δημοσιεύσεις: 1248
Εγγραφή: 11 Φεβ 2007 20:45
Τοποθεσία: Άστεγος!

GR or EN???

Δημοσίευση από p_pan » 08 Αύγ 2007 16:48

basika eixa kanei ena suntaktiko la8os.. alla ok to brika.. kai skeutika to allo... na kano ena kodika stin index.. kai na exei mia if.. na tsekari kai ena cookie kai otan mpeneis gia proti fora na s rotaei ti glossa 8es... kai otan epileghs na apo8ikeuei mesa sto cookie tin protimisi sou px gia mia hmera kai etsi na ginete na katalabenoun oles h selides tou site mou ti epilogi exeis kanei kai me if mesa se autes na exo ta kimena kai agglika kai ellinika kai analogos to cookie na ektipononte... ti les?? tora oso afora ti basei na xriazome to idia table pou exo na ta antigraco kai pali me mia if na emfanizo auta pou einai gramena sta ellinika h auta pou einai gramena sta agglika..
Αγράματος...

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

GR or EN???

Δημοσίευση από _Invisible_ » 08 Αύγ 2007 17:23

Ήθελα να κάνω και εγώ ένα post εδώ αλλά δεν είχα τον απαιτούμενο χρόνο.

Θα σου πω πώς το έχω κάνει εγώ. Βασικά, αυτό που πρέπει να έχεις στο μυαλό σου είναι η λογική και η δομή, όλα τα υπόλοιπα είναι απλά εντολές κώδικα και συντακτικό.

Ας πούμε ότι θέλουμε να αποθηκεύσουμε την γλώσσα του χρήστη σε ένα session έτσι ώστε σε κάθε request να μην χρειάζεται να περνάμε το attribute της γλώσσας.

Έχουμε, για παράδειγμα, το index.php:

Κώδικας: Επιλογή όλων

<?php
session_start&#40;&#41;;

define&#40;'ALLOW_ACCESS', TRUE&#41;;

require_once&#40;'./select_lang.php'&#41;;

// index.php code goes here

?>
Κώδικας του select_lang.php:

Κώδικας: Επιλογή όλων

<?php

if &#40;!defined&#40;'ALLOW_ACCESS'&#41;&#41;
&#123;
    exit;
&#125;

$default_lang = 'english';

$user_lang = &#40; isset&#40;$_SESSION&#91;'lang'&#93;&#41; && !empty&#40;$_SESSION&#91;'lang'&#93;&#41; &#41; ? trim&#40;$_SESSION&#91;'lang'&#93;&#41; &#58; '';

if &#40; empty&#40;$user_lang&#41; &#41;
&#123;
    $default_lang_file = './lanugages/'.$default_lang.'.php';

    if &#40; file_exists&#40;$default_lang_file&#41; && is_file&#40;$default_lang_file&#41; &#41;
   &#123;
       require_once&#40;$default_lang_file&#41;;
   &#125;
   else
   &#123;
      die&#40;"Default lang file not found."&#41;;
    &#125;
&#125;
else // lang session is not empty
&#123;

    $session_lang = htmlspecialchars&#40;stripslashes&#40;$user_lang&#41;&#41;;
   $session_lang_file = './languages/'.$session_lang.'.php';

   if &#40; file_exists&#40;$session_lang_file&#41; && is_file&#40;$session_lang_file&#41; &#41;
   &#123;
      require&#40;$session_lang_file&#41;;
    &#125;
    else
   &#123;
      unset&#40;$_SESSION&#91;'lang'&#93;&#41;;
      die&#40;"We are sorry, but the selected language doesn't exists."&#41;;
    &#125;

&#125;

?>
Λοιπόν, τι γίνεται στο select_lang.php:
Κοιτάμε αν έχει δημιουργηθεί το session με όνομα "lang". Αν ναι, ελέγχουμε αν είναι κενό. Αν είναι κενό, κάνουμε το board να κάνει include την default γλώσσα (πχ Αγγλικά).

Τα αρχεία πρέπει να υπάρχουν στον κατάλογο ./languages
Για παράδειγμα το αρχείο english: ./languages/english.php. Αν υπάρχει, θα το κάνει include, αλλιώς πετάει error.

Στο lang session, θα αποθηκεύεις το όνομα του αρχείου της γλώσσας.

Για να κάνεις τον χρήστη να επιλέξει μια γλώσσα:
change_language.php http://example.com/change_language?lang=greek

Κώδικας: Επιλογή όλων

<?php

session_start&#40;&#41;;

$lang = &#40; isset&#40;$_GET&#91;'lang'&#93;&#41; && !empty&#40;$_GET&#91;'lang'&#93;&#41; &#41; ? trim&#40;$_GET&#91;'lang'&#93;&#41; &#58; '';

if &#40; empty&#40;$lang&#41; &#41;
&#123;
    die&#40;"Please select a language!"&#41;;
&#125;
else
&#123;
   $new_lang = htmlspecialchars&#40;stripslashes&#40;$lang&#41;&#41;;
   $lang_file = './languages/' . $new_lang . '.php';

   if &#40; file_exists&#40;$lang_file&#41; && is_file&#40;$lang_file&#41; &#41;
   &#123;
      $_SESSION&#91;'lang'&#93; = $new_lang;
      header&#40;"Location&#58; index.php"&#41;;
      exit;
   &#125;
   else
   &#123;
      die&#40;"We are sorry, but there's no such language."&#41;;
    &#125;

&#125;

?>
Τι γίνεται με το change_language.php: Αν κληθεί με το attribute lang στο URL (?lang=greek), τότε θα ψάξει να κοιτάξει αν υπάρχει το αρχείο ./languages/greek.php. Αν υπάρχει, τότε θα ορίσει την τιμή του lang session ως "greek". Οπότε μετά που θα σε κάνει redirect στην σελίδα index.php, όλα θα σου εμφανίζονται στην επιλεγμένη γλώσσα (στην περίπτωσή μας τα ελληνικά).

Πρέπει να κάνεις πάντα include το select_lang.php για να μπορεί η εφαρμογή σου να διαλέγει την κατάλληλη γλώσσα. Επίσης το

Κώδικας: Επιλογή όλων

$default_lang = 'english';
θα μπορούσες να το πάρεις και από κάποιο config table της DB -- δηλαδή να αποθήκευες την default γλώσσα σε ένα table ρυθμίσεων.

Σου προτείνω να δημιουργήσεις ένα αρχείο common.php και εκεί να βάλεις ότι ελέγχους θέλεις να γίνονται κατά την εκτέλεση της σελίδας σου, πχ στο URL, να κάνεις include κάποια αρχεία κλπ... και έτσι δεν θα χρειάζεται να βάζεις μία λίστα με αρχεία κάθε φορά για include -- απλά θα κάνεις include αυτό που έχει τα include :wink:

Επίσης κάτι πολύ σημαντικό: Αν οι σελίδες σου καλούνται με το όνομά τους (πχ: example.com/my_file.php), τότε θα πρέπει να βάζεις στην αρχή session_start(); για να μπορεί να δουλέψει η ιστορία με τις γλώσσες.

Επίσης πρόσεχε μην βάλεις δύο session_start(), γιατί θα έχεις πρόβλημα. Δηλαδή μην βάλεις session_start() και στο -λέμε τώρα- functions.php και στο config.php... Αν τα κάνεις include και βρει η php 2 session_start() θα σου πετάξει σφάλμα.

Επίσης σου προτείνω να γράφεις πάντα τα script σου χρησιμοποιώντας το error_reporting(E_ALL); και το ini_set('display_errors', true); για να εμφανίζει η PHP όλα τα σφάλματά σου. Φυσικά αυτό θα το κάνεις locally, και όχι στον web server σου. Πρέπει να δεις τι λάθη υπάρχουν στον κώδικα και να τα διορθώνεις. Ποτέ μα ποτέ μην αφήνεις κώδικα με λάθη στο net. :)

Τώρα αν θες να εμφανίσεις την λέξη "Home" στο index.php θα γράψεις πχ:

Κώδικας: Επιλογή όλων

<html>
<head>
    <title><?=$lang&#91;'Home'&#93;;?></title>
</head>
<body>
.....
</body>
</html>
Υποτίθεται όμως ότι το $lang['Home'] θα έχει οριστεί μέσα στο lang αρχείο που έχει γίνει include. Δηλαδή και στο ./languages/english.php και στο ./languages/greek.php πρέπει να έχεις ένα $lang['Home']:

Κώδικας: Επιλογή όλων

$lang&#91;'Home'&#93; = 'Home Page'; // ./languages/english.php
$lang&#91;'Home'&#93; = 'Αρχική Σελίδα'; // ./languages/greek.php
Ελπίζω να βοήθησα.

mat_
Δημοσιεύσεις: 121
Εγγραφή: 09 Απρ 2004 02:01

GR or EN???

Δημοσίευση από mat_ » 10 Αύγ 2007 04:47

_Invisible_ πολύ καλό το ποστ σου.
Το δοκίμασα και λειτουργεί άψογα αλλά όχι με τον παρακάτω τρόπο που θα σου εξηγήσω. Υπόψη ότι το έκανα στον ίδιο server.

Έχω φτιάξει header.php και footer.php τα οποία καλούνται σε κάθε σελίδα γιατί το περιεχόμενο του "πάνω" και "κάτω" μέρους είναι ίδιο. Βάζω τον 1ο κώδικα που γράφεις στο header.php, φτιάχνω τις γλώσσες κτλ.
Όμως εμφανίζονται αυτά τα σφάλματα:

Κώδικας: Επιλογή όλων

Warning&#58; require_once&#40;&#41; &#91;function.require-once&#93;&#58; URL file-access is disabled in the server configuration in /home/***/public_html/gr/header.php on line 6

Warning&#58; require_once&#40;http&#58;//www.***.com/gr/select_lang.php&#41; &#91;function.require-once&#93;&#58; failed to open stream&#58; no suitable wrapper could be found in /home/***/public_html/gr/header.php on line 6

Fatal error&#58; require_once&#40;&#41; &#91;function.require&#93;&#58; Failed opening required 'http&#58;//www.***.com/gr/select_lang.php' &#40;include_path='.&#58;/usr/lib/php&#58;/usr/local/lib/php'&#41; in /home/***/public_html/gr/header.php on line 6
Δεν λειτουργεί με τον τρόπο αυτό; Πρέπει να κάνω κάτι επιπλέον;

Ευχαριστώ


ΥΓ: Στο select_lang.php στη σειρά 14 υπάρχει ένα μικρό τυπογραφικό λάθος στο

Κώδικας: Επιλογή όλων

$default_lang_file = './lanugages/'.$default_lang.'.php'; 

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

GR or EN???

Δημοσίευση από _Invisible_ » 10 Αύγ 2007 12:46

Το λαθάκι εκείνο υπάρχει γιατί το έγραψα εδώ κατευθείαν τον κώδικα χωρίς να τον ελέγξω. Αφού το εντόπισες για μένα, σ' ευχαριστώ.

Από το σφάλμα που έκανες παράθεση καταλαβαίνω ότι έκανες το εξής:

Κώδικας: Επιλογή όλων

require_once&#40;'http&#58;//example.com/file.php'&#41;;
Η PHP δεν επιτρέπει να κάνεις include αρχεία δίνοντας full url, ακόμη και αν το URL είναι του server σου. Φυσικά μπορείς να επιτρέψεις στην PHP να κάνει include αρχεία μέσω URL αλλά είναι πολύ επικύνδυνο.

Αν υποθέσουμε ότι το script σου βρίσκεται στο http://localhost/test και το αρχείο index.php είναι μέσα στον φάκελο test, τότε πολύ απλά στο index.php όταν κάνεις require, θα βάλεις:

Κώδικας: Επιλογή όλων

require_once&#40;'./header.php'&#41;;
// rest code here
require_once&#40;'./footer.php'&#41;;
Φυσικά τα αρχεία header.php & footer.php θα πρέπει να βρίσκονται και αυτά στον φάκελο test. Πρέπει να μάθεις να ορίζεις τα path. Αν κάνεις include ένα αρχείο χωρίς να γράψεις ./ τότε η PHP θα ψάξει για το αρχείο αυτό σε άλλους καταλόγους -- σε καταλόγους που η PHP χρησιμοποιεί κάποια αρχεία, πχ classes. Για να δεις ποιοι είναι αυτοί οι κατάλογοι της PHP που υπάρχουν common αρχεία όπως το class PEAR, γράφεις:

Κώδικας: Επιλογή όλων

echo ini_get&#40;'include_path'&#41;;
Αν και το include_path της PHP σου "αποκαλύφθηκε" στο σφάλμα που μας έδωσες:
include_path='.:/usr/lib/php:/usr/local/lib/php')
Επεξηγηση include_path:
Όπου βλέπεις : σημαίνει ότι μετά ακολουθεί άλλο path. Για παράδειγμα τα include path της PHP σου είναι 3:
(1) .
(2) /usr/lib/php
(3) /usr/local/lib/php

Εύκολο, έτσι δεν είναι;

Path:
./ -> τρέχον κατάλογος
../ -> ένας κατάλογος επάνω*

*Δηλαδή αν βρισκόμαστε στον κατάλογο /test/images και βάλουμε για path ../ τότε θα ψάξει το αρχείο σε έναν κατάλογο επάνω -- στον test. Το ίδιο ισχύει σε όσα ../../ βάλεις.

../ -> ένας κατάλογος επάνω
../../ -> δύο κατάλογοι επάνω κ.ο.κ.

Ελπίζω να βοήθησα.

mat_
Δημοσιεύσεις: 121
Εγγραφή: 09 Απρ 2004 02:01

GR or EN???

Δημοσίευση από mat_ » 10 Αύγ 2007 14:39

Σε ευχαριστώ πολύ για τον χρόνο σου.

Περίεργο, ενώ μπορώ να βάλω σε full path την εντολή include ενώ την require_once όχι.

Το έκανα όπως μου είπες και δουλεύει.

Το πρόβλημα όμως είναι άλλο και αυτός ήταν ο λόγος που είχα βάλει σε full path.
Το site έχει τα εξής αρχεία ας πούμε:
header.php
footer.php
index.php
change_language.php
select_lang.php
downloads/index.php
hotels/index.php
hotels/search.php
...
...

Στο αρχείο index.php του φακέλου hotels για παράδειγμα θα ψάξει το αρχείο select_lang.php στο hotels ενώ δεν είναι εκεί! Επίσης θα ψάξει τον φάκελο languages εκεί με τα αρχεία en.php και gr.php (για παράδειγμα). Σε αυτή τη περίπτωση ποια είναι η λύση;

Σε ευχαριστώ και πάλι.

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1947
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

GR or EN???

Δημοσίευση από Alice_Cooper » 10 Αύγ 2007 15:08

to zhtas etc mesa apo to hotels/index.php

Κώδικας: Επιλογή όλων

require_once&#40;'../select_lang.php'&#41;;
opos eksigise kai o _Invisible_
Path:
./ -> τρέχον κατάλογος
../ -> ένας κατάλογος επάνω*

*Δηλαδή αν βρισκόμαστε στον κατάλογο /test/images και βάλουμε για path ../ τότε θα ψάξει το αρχείο σε έναν κατάλογο επάνω -- στον test. Το ίδιο ισχύει σε όσα ../../ βάλεις.

../ -> ένας κατάλογος επάνω
../../ -> δύο κατάλογοι επάνω κ.ο.κ.

mat_
Δημοσιεύσεις: 121
Εγγραφή: 09 Απρ 2004 02:01

GR or EN???

Δημοσίευση από mat_ » 23 Αύγ 2007 05:40

Καλημέρα, έχω μια άλλη ερώτηση σχετικά με τις πολυγλωσσικές σελίδες που χρησιμοποιούν αυτό τον τρόπο που δημοσίευσε ο _Invisible_.

Ας πούμε ότι έχουμε μια βάση δεδομένων στην οποία έχουμε τα πεδία location_en και location_gr όπου έχουμε αποθηκεύσει αναλόγως τα δεδομένα. Πώς με την php θα "τραβάει" τα δεδομένα -αναλόγως τη γλώσσα που έχουμε επιλέξει- τα πεδία location_en, location_gr για αγγλικά ή ελληνικά αντίστοιχα;

Για παράδειγμα έχουμε τα queries:

Κώδικας: Επιλογή όλων

$query = "SELECT location_en FROM `table` ORDER BY location_en ASC";

Κώδικας: Επιλογή όλων

$query = "SELECT location_gr FROM `table` ORDER BY location_gr ASC";
Πώς θα τρέχει το ανάλογο query με την επιλεγμένη γλώσσα;

Ευχαριστώ

Άβαταρ μέλους
_Invisible_
Δημοσιεύσεις: 418
Εγγραφή: 16 Νοέμ 2006 16:47
Τοποθεσία: Greece

GR or EN???

Δημοσίευση από _Invisible_ » 23 Αύγ 2007 08:28

Αν παραπάνω έχεις κάνει include το αρχείο γλώσσας σου, τότε δεν θα είναι πρόβλημα. Αυτό που πρέπει να κάνεις είναι το εξής: Μέσα στο αρχείο γλώσσας, θα βάλεις ένα $lang['code'] = 'en'; και στο SQL query σου θα το χρησιμοποιήσεις.

Κώδικας: Επιλογή όλων

$lang_code = 'language_' . $lang&#91;'code'&#93;;

$sql = "SELECT " . $lang_code . ", pedio2, pedio3 FROM table WHERE field = 'value';
Φυσικά πρέπει να κάνεις μερικές αλλαγές στο query, αλλά το πιο σημαντικό είναι να βάλεις μία μεταβλητή $lang['code'] και να την χρησιμοποιήσεις.

Αυτή την μεταβλητή πρέπει να την βάλεις σε κάθε αρχείο, και να βάλεις το σωστό code για την κάθε γλώσσα (πχ για τα Αγγλικά: en, για τα Ελληνικά: gr)


Φιλικά,
invisible.


Hik
Δημοσιεύσεις: 162
Εγγραφή: 23 Σεπ 2005 10:34

GR or EN???

Δημοσίευση από Hik » 26 Αύγ 2007 13:22

Επίσης καλό είναι να χρησιμοποιείται ένα σύστημα cache (π.χ. Cache Lite, http://pear.php.net/package/Cache_Lite) για να μην γίνονται άσκομα queries στη DB συνέχεια.

Το κείμενο ενός site σπάνια αλλάζει.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες