Jak zrobic najlepiej kilka jezykow ?

0

Witam.
Jak w serwisie zrobic najlepiej kilka jezykow?
Z zapamietaniem wyboru to zrobie cookiesa pewnie ale
tlumaczenie zrobic w plikach w ktorych beda zdefiniowane zmienne czy w bazie zobic?

0

Najlepiej w plikach, a ustawienia pamiętać w profilu użytkownika lub w cookies jeśli nie ma systemu logowania/rejestracji.

0

Zrobilem sobie katalog include w nim dalem katalog language i w nim np english i polish.
W kazdym z katalogow jezykowych jest ten sam plik: main.php
W pliku jest przykladowe kilka linijek

W polskim:

$lang['home'] = 'Główna';
$lang['contact_us'] = 'Kontakt';

W angielskim

$lang['home'] = 'Home';
$lang['contact_us'] = 'Contact';

I teraz w pliku header.php dalem taka linijke
<? include_once('include/language/english/main.php'); ?>
ta linijka zmienia sie w zaleznosci od klikniecia we flage
<? include_once('$_SESSION[lang]'); ?>
Ta zmienna jest odczytana z pliku cookie a jesli cookie nie ma to ustawia standard jezyk
i tworzy cookie. potem zmiana jezyka powoduje zmiene danej sesyjnej [lang] na sciezke do odpowiedniego
pliku jezykowaego i wtedy odczytuje inne dane.

Czy to dobre rozwiazanie czy jednak powinienem zastosowac cos innego ?

0
<? include_once('$_SESSION[lang]'); ?>

Najgorszy z możliwych zapisów (i tu chyba nikt się do mnie nie doczepi)

<?php include_once($_SESSION['lang']); ?>

Najlepiej jakbyś sam ocenił swoje rozwiązanie, jak się sprawdza w praktyce.
Z tablicami tyle tylko drobnych zmian że jako indeksy użyłbym polskiego lub angielskiego tłumaczenia, czyli:

$lang['Główna'] = 'Home';

Wtedy masz z poziomu właściwego kodu dokładny podgląd na to, co pokaże się userowi.

0
Demonical Monk napisał(a)

Z tablicami tyle tylko drobnych zmian że jako indeksy użyłbym polskiego lub angielskiego tłumaczenia, czyli:

$lang['Główna'] = 'Home';

Wtedy masz z poziomu właściwego kodu dokładny podgląd na to, co pokaże się userowi.
A co to za wynalazek i po co? $lang[$lang['home']]?

0

@masterO:
Przestrzegam Cię przed inkludowaniem plików, których nazwy przekazywane są jako parametry (GET, POST, wartości ciasteczek etc.). To może być ogromna luka bezpieczeństwa, szczególnie gdy serwer ustawiony jest nie tak, jak trzeba! Musisz zakładać, że jakiś atakujący haker/cracker może Ci podesłać dowolnie chamskie, spreparowane dane (również w ciasteczkach).

Co jeśli np. wyśle Ci ciasteczko nie o wartości "english.php" czy "polish.php", tylko "../../../twoj_tajny_plik"? Zainkludujesz mu plik z tajnymi danymi!

Dlatego możesz napisać sobie funkcję set_language($language_code) i inkludować ją we wszystkich potrzebnych plikach. I na górze tych plików robisz set_language($_SESSION['lang']).

Co Ci to daje? Ano to, że w funkcji set_language możesz się jakoś obronić! Np. jakoś tak:

$lang = array();

function set_language($language_code) {
  global $lang;
  $is_language_code_valid = $language_code === 'pl' || $language_code === 'en';
  if (!$is_language_code_valid) {
    $language_code = 'pl'; // albo to, albo -- może lepiej -- rzucasz w tym miejscu błąd
  }
  include_once($language_code . '.php');
}

Funkcja akceptuje parametry 'en' (dla języka angielskiego) lub 'pl' (dla polskiego). Funkcja ustawia język, inkluduje odpowiednio en.php lub pl.php (naturalnie, możesz zmienić en i pl na english i polish i wtedy zmienić też language_code na language_name). A jak podasz funkcji nieprawidłowy kod języka -- nieobsługiwany, czy złośliwie spreparowany -- to ustawi domyślnie język na polski.

Ponieważ inkludujesz kod wewnątrz funkcji, więc wypada oznaczyć $lang jako zmienną globalną -- w końcu musi być dostępna również poza funkcją. Można też zamiast tego używać $_GLOBALS.

0

@up czasami dobre i to mozna sobie config'a odczytac z mysla ze na ftp beda takie same pasy :) jeden zombie srv wiecej :) zreszta z tego ci mi wiadomo to RFI tez by moze zadzialalo.

Ludzie tylko nie global wiekszego burdelu w kodzie nie da sie miec.
Proponuje trzymac wszystkie jezyki w jednym pliki i ustawiac flagi o tak:

$msg['pl']['error'] = 'jakis blad';
$msg['eng']['error'] = 'any error';

Wtedy nie masz 3 plikow dla kazdego jezyka tylko 1 wspolny.
Z tym ze tak mozesz trzymac tresci bledow.
A co ze statyczna/dymamiczna trescia?
Nie chce mi sie tlymaczyc wiec zapraszam do przeczytania: http://forum.php.pl/index.php?showtopic=44703&st=60&p=476814&#entry476814
<ort>ode mnie </ort>powiem tyle ze jesli chodzi o statyczne tresci polecam drzewko katalogow dla jezykow do srednich aplikacji sie sprawdza.
Dla dynamicznych polecam tabele z id/nazwa jezyka.

0

Z jednym plikiem w ktorym jest wszystko przy wiekszej ilosci jezykow wydaje sie malo przejrzyste pozniej. Nie jestem expertem i <ort>naraze </ort>zostawilem kazdy jezyk w oddzielnym katalogu Plus funkcja do zmiany jezyka. Przetestuje ten sposob. Drugim sposobem jest baza danych z tlumaczeniami tak mysle ze to tez dobry pomysl. Chociaz nie wiem co lepsze czy baza czy pliki.

Mam Jeszcze takie pytanie. Moj sposob zobilem tak z ciekawosci na zmiennych sesyjnych. i wyglada to tak:
<? include_once('includes/language/'.$_SESSION[language].'/index.php'); ?>
Czyli jesli nacisne flage i bedzie do zmiennej dopisane ze language = english to mi wczyta z katalogu english
Jesli polish to z katalogu polish. Czy uzycie sesyjnej zmiennej w polaczniu z cookies bo ciacho dalem na zapamietanie
jaka byla ostatnia opcja wybrana moze spowodowac realne zagrozenie ? Wydaje mi sie ze nie ma sposobu by z przegladarki
spreparowac cos w parametrze SESSION ?

0

Wydaje mi sie ze nie ma sposobu by z przegladarki
spreparowac cos w parametrze SESSION ?

Na darmowych srv przewaznie jest jeden katalog sesji dla wszystkich i mozna zmieniac sesje jak sie chce nawet na cba.pl byl taki bug ze kazdy mogl miec admina sam nawet testowalem.

Ogolnie czemu ma byc burdel jak bedzie 1 plik jak wszystko ladnie rozplanujesz plik bedzie wygladal przejzyscie i bedzie zawieral komentarze to bedzie lajtowo.

Zreszta jakies bardziej wyrafinowane techniki to np gettext.

0
marcio napisał(a)

Wydaje mi sie ze nie ma sposobu by z przegladarki
spreparowac cos w parametrze SESSION ?

Na darmowych srv przewaznie jest jeden katalog sesji dla wszystkich i mozna zmieniac sesje jak sie chce nawet na cba.pl byl taki bug ze kazdy mogl miec admina sam nawet testowalem.

Ogolnie czemu ma byc burdel jak bedzie 1 plik jak wszystko ladnie rozplanujesz plik bedzie wygladal przejzyscie i bedzie zawieral komentarze to bedzie lajtowo.

Zreszta jakies bardziej wyrafinowane techniki to np gettext.

Do którego nie masz dostępu...

0

Aha co do ilosci plikow to zastanow sie tez jak dojdzie ci dodac 10 error'ow do 4 roznych plikow jezykowych powodzenia ja to bede mial w jednym i zrobie to w 5 min.

Do którego nie masz dostępu...

Powiadasz?Czytales kiedys o session injection i session poisoning jesli nie to polecam szybka lekturke niestety nie kazdy admin srv'a zna sie na tym co robi.
<ort>poza tym </ort>jak potrafisz szukac w google to filmik latwo <ort>znaleŹĆ </ort>:) stary ale pokazuje bezpieczenstwo dobrze skonfigurowanego srv i na dodatek wspoldzielonego.

0

nie ma mozliwosci uzyc zadnego SESSION INJECTION nie te czasu juz. A co do pliku to co do edycji masz racje ja bede musial edytowac 5 plikow lub 10 a Ty jeden. Zalezy jaka ilosc jest tez <ort>wtakim </ort>pliku i jak szybko bedzie czytany plik z 40 jezykami w jednym czy szybcijej jeden plik z konretnym jezykiem. Jesli dluzej bede sie meczyl robiac wiele dycji to wole by moj czas byl dluzszy niz czas ladowania serwisu.

0

I zależy jeszcze od wygody dodawania sobie nowych języków w przypadku usera. Nie widziałem żadnego sensownego forum (phpBB, SMF) które by używało jednego pliku do kilku języków. Bo wtedy to jest bajzel, jak masz 5k linijek kodu i nawet nie orientujesz się ile to języków.

0

I zależy jeszcze od wygody dodawania sobie nowych języków w przypadku usera. Nie widziałem żadnego sensownego forum (phpBB, SMF) które by używało jednego pliku do kilku języków. Bo wtedy to jest bajzel, jak masz 5k linijek kodu i nawet nie orientujesz się ile to języków.

Bo robi sie osobny plik jezyku dla biblioteki,komponentu,pluginu i widget'ow a nie jeden plik dla calego systemu to raz wiec wiecej niz 50 bledow na jezyk miec nie bedziesz.

@master0 zdziwilbys sie najpierw potestuj potem gadaj aluzje.

0

Nie chodzi o aluzje ale o wygode. Wstawilem do jednego pliku z tablicami $lang[en][home] = costam ale pozniej jak to bylo podzielone na taie sekcje

//angielski

//polski

//niemiecki

to zeby dodac kolejne linijki musialem szukac koncowki kazdej sesji i dopisywac wiec w sumie tez niewiele to przyspiesza. Wybralem wiec opcje kazdy jezyk w oddzielnym pliku.

0

to zeby dodac kolejne linijki musialem szukac koncowki kazdej sesji i dopisywac wiec w sumie tez niewiele to przyspiesza. Wybralem wiec opcje kazdy jezyk w oddzielnym pliku.

Chlopie nie przesadzaj moze chcesz odpalic php i miec <ort>Od razu </ort>system blogowy?
Troche wysilku zreszta nowy error mozesz dodac byle gdzie i tak w tablicy bedziesz mial index ktory opisze jezyk i typ bledu ROTFL.

0
marcio napisał(a)

to zeby dodac kolejne linijki musialem szukac koncowki kazdej sesji i dopisywac wiec w sumie tez niewiele to przyspiesza. Wybralem wiec opcje kazdy jezyk w oddzielnym pliku.

Chlopie nie przesadzaj moze chcesz odpalic php i miec <ort>Od razu </ort>system blogowy?
Troche wysilku zreszta nowy error mozesz dodac byle gdzie i tak w tablicy bedziesz mial index ktory opisze jezyk i typ bledu ROTFL.

Niestety nie koduje w stlu "Byle gdzie"

0

Dorzucę jeszcze, że często zachodzi potrzeba użycia różnych szablonów z html dla róznych języków, warto też o tym pomysleć

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