Temat: Inna beczka

Cześć, pozwolę sobie na pytanie z innej beczki.

Mam do poprawienia projekt nie robiony w Cake lecz w czystym PHP ('lekko obiektowy'). Musze mu dorobić wersje jezykowe a troche tego moze byc ;/

Pytanie jak sie do tego w miare rozsadnie zabrac (bez pisania mi tu ze od nowa napisac smile ):
1) utworzyc pliki z tabelami gdzie kazdy wiersz tabeli to osobny tekst a nastepnie zaczytywac na poczatku caly plik z tekstem (troche mam wrazenie ze mozolne)

2) wykozystac do tego w jakis sposob baze danych (wprowadzanie tekstow bedzie trwalo lata i wyciaganie tez troche powolne)

3) rozwiazanie podobne do pierwszego: jakas klasa i wywolywac teksty

4) jakies inne propozycje na szybko?

PS: troche bedzie czas gonil a do tego jeszcze to trzeba bedzie tlumaczyc hmm

Dzieki z gory smile

2

Odp: Inna beczka

Ja bym trzymal wsio w  plikach w ktorych mialbym zdefiniowane stale

np

languages/pl.php

i w srodku

<?php      
     define('STALA','wartosc');

taka zawartosc pozniej latwo zaimportowac do bazy w razie potrzeby.

Tlumaczowi dajesz plik z pllska wersja i prosisz zeby wpisal swoje tlumaczeie zamiast poslkeigo, pozostawiajac wartoscstalej tak ak jest ...

np

KOSZYK_SPRAWDZ_ZAWARTOSC, Sprawdz zawartosc koszyka
KOSZYK_DODAJ_DO_KOSZYKA, Dodaj do koszyka


ma zamienic na

KOSZYK_SPRAWDZ_ZAWARTOSC, Check what's in your basket
KOSZYK_DODAJ_DO_KOSZYKA, Add to basket

jak Ci to da w formie leketoronicznej, to 90% roboty za Ciebie zrobi tlumacz ;-)


Oczywista oczywitość, żeby nie utonąć w burdelu, który sie na pewno zrobi, podziel stałe na grupy ktorych sie tyczą dodająć odpowiedni prefix do stałej.

np

KOSZYK_

ZAMOWIENIE_

MENU_( MENU_O_NAS)

itp,
jezeli gdzies wystepuje ten sam string 2 razy ... lepiej stworzyc dwie stale, niz pozniej ma sie okazac ze zmieniles string, i  w drugim miejscu w ktorym poprzedni sting mial sens... teraz go zupelnie stracil, pozatym w niektorych jezykach, cos co brzmi po polskiemu tak samo ... np "dodaj do koszyka" moze miec kilka roznych tlumaczen w zaleznosci od kontekstu.

Ostatnio edytowany przez robal77 (2009-08-05 13:53:11)

3

Odp: Inna beczka

Dzięki.

A czemu w takim razie uzywać stałe wg Ciebie a nie tabele jak pomyślałem na początku? Było by podobnie... include(pl.php)

a tam tablica:
['koszyk'][1] = "oproznij"
['koszyk'][2] = "uzupełnij";
['zamowienie'][1] = "dodaj towar";
['zamowienie'][2] = "usun towar";

4

Odp: Inna beczka

tablice a nie tabele wink

1.
A skad do cholery bedziesz wiedziec czy to czego szukac bedzie pod indexem 762344 czy 9983248  ( wiem ze bedziesz miec pewnie max z 50 indexow w jednej "kategorii" )  wink Po tygodniu z tym bedziesz miec to obcykane, tylko pomysl jaki szok przezyje osoba ktora odziedziczy po Tobie opiek nad projektem i co powie zleceniodawcy.

2. A co bedzie jak pomieszasz indexy ?? I jak masz zamiar to pozniej poprawic w 3 minuty ?


3. Dostajac od tlumacza cos takiego :

KOSZYK_DODAJ_DO_KOSZYKA, 한국어/조선말

Latwo zamienisz to na na

define('KOSZYK_DODAJ_DO_KOSZYKA','한국어/조선말');

pozatym tlumacz nie zwali winy  na Ciebie, jak sie walnie i pomyli stringi.

Ostatnio edytowany przez robal77 (2009-08-05 15:25:13)

5

Odp: Inna beczka

no ja bede wiedzial bo ja to bede musial zrobic ;] (oczywiscie z pomoca mlodych niestresujacych sie przepisywaniem setek linijek tekstu kobiet tongue )

wiec poprostu jak napotkam w kodzie php:

echo 'Cześć Świat';

zaminienie to na:

echo $language['hello'][1] = 'Hello World';

bo taki bede mial nastepny indeks w moim pliku tekstowym. Znakow bedzie w pyte, boje sie ze zaczne sie mylic jak bede robil definicje hmm Do tej pory caly kod PHP zajmuje okolo 1,5MB tekstu wiec jest tego troche do tlumaczenia ;/


PS: to tylko takie teoretyczne dociekania smile

Ostatnio edytowany przez duke_piotr (2009-08-05 16:30:21)

6

Odp: Inna beczka

Standardowo w zamierzchlych czasach przed pojawieniem sie pierwszego frameworka gdy na zewnatrz szalalo PHP4
robilem hybryde tego o czym mowicie:

texty w HTMLU sztywne poprzez definy w dolaczanym pliku

a automatycznie generowana tres lub opisy produktow z bazy

Faktem jest, ze kobiety sa tu niezbedne;)

7

Odp: Inna beczka

Powiem tak duke_piotr ... sam stwierdzisz po pewnym czasie ze wpakowales sie w niezly kanal z tymi tablicami.

W dalszym ciagu nie rozumie, jaki problem zrobic raz zestawienie  nazwa stalej, tlumaczenie

ponownie :
HELLO, Witam

potem dac to lumaczowi i wyjasnic mu ze oczekujesz wersji elektorniczne tlumaczenia, z t polskim znaczeniem zastapianym tlumaczeniem dla kazdego z jezykow odpowienio:

HELLO, Haai

HELLO, Tungjatjeta

HELLO, Subbah-el-kheir

Co pozniej latwo mozna pozmieniac wyrazeniem regularnym na :
defile("HELLO","Witam");

defile("HELLO","Haai");

Pozatym, zakladajac ze bedziesz miec 1000 roznych slow, zwrotow , czy zalych paragrafow textu, i 5 jezykow ... dostaniesz tablice z 5000 elemantami, ktora bedziesz wczytywac doslownie na kazdej stronie.

Zakladajac ze srednia dlugosc stringa bedzie wynosic 60 znakow ... np
"To jest moj wspalanialy string, wsadze sobie go w ... tablice."

Tablica bedzie zajmowac 300kb, nie wiele, w pamieci serwera jeszcze mniej, pewnie ze 20 kb, ale bedzie co klik kompresowana i rozkompresowywana, tez nie wiele, ale wystarczy kilkadziesiat google botow zapierdzielajacych po stronie zeby serwer sie spocil.

Mozesz sobie zrobic maly benchmark na plikach z osobno zpisanymi wersjami jezykowymi, albo z tablica ktora bedzie zawierac tylko jeden jezyk (w tym przypadku i zalozeniach z kilku linek wyzej , strzelam w ciemno ze bedzie az 5 razy szybciej big_smile ).

Ostatnio edytowany przez robal77 (2009-08-05 22:20:37)

8

Odp: Inna beczka

Chodzi o to ze tych tlumaczen strzelam ze bedzie okolo 10 000 zdań i boję się że może mi zabraknąć "stałych" do definiowania i ze moge sie latwiej pomylic. Nie neguje twojego rozwiazania i przyjmuje je do swiadomosci jako jedno z mozliwych.

Kazda tablica bedzie przetlumaczona jako odobny plik (PL,ANG itp) wiec moze nie bedzie tyle wazylo skoro bede zaczytywal tylko jeden z nich.

9

Odp: Inna beczka

Powiem tak, nie forsuje mojego rozwiazania,, tylko staram sie znalezc jak najwiecej slabych stron Twojego, mozesz zrobic to samo z moim, potem zrobisz sobie podsumowanie i  bedziesz wiedziec co bedzie lepsze.

Co do ilosci stalych to nie ma problemu - przeciez klucze tablicy asocacyjnej tez musisz jakos nazwac, jezyk polski ma pewnie kolo 4kk slow ;-)

10

Odp: Inna beczka

Hmm no ok moze czegos w takim razie nie rozumiem hmm

Czym sie rozni zaczytanie pliku z 10000 stalych od zaczytania pliku z tablica o 1000 wierszy?

Moze potrzebuje bardziej lopatologicznie ;]. A klucze oznaczal bym jako cyferki a nie nazwa wiec unikna bym problemu z nazewnictwem. Fakt twoje rozwiazanie mozna tez tak zrobić tzn, u mnie [kosz][1] u Ciebie KOSZ_1. Tak więc jakbyś mogł mi wyjaśnić czym się to bedzie z punktu widzenia działania róznić (chodzi o zaczytywanie pliku i czytanie z niego).

11

Odp: Inna beczka

Wiec tak zrobilem sobie maly benchmark 2 plikow :

1. Plik ze 200k zdefiniowanymi stalymi - define("const_1","X")
2. Tabica ze 200k elementow - $l("const_1","X")

gdzie X byl losowym ciagiem znakow o dlugosci od 32 do 256 znakow, takim samym dla tablicy i jak i stalej czyli

const("const_9234") = $l["const_9234"];

i dwa wnioski :
1. Wczytanie pliku z tablica zre jakies 30% tego co wczytanie pliku ze stalymi, czyli odpowiednio przy wczytywaniu dla ppliku z tablica wyszlo  jakies 60mb i kolo 190mb dla stalych wink

2. Wyszukiwanie wartosci z tablicy bylo u mnie dwukrotnie szybsze (moze pez APC)  niz wyszukanie wartosci stalej ( dla testu zwijalem w jeden string ( bez wypisywania na ekranie) 10k losowyc stalych  lub 10k wartosci z tablicy.

Czyli wychodzi na Twoje : tablice nad stalymi( ale dalej uwazam ze indexy numeryczne to zly pomysl wink

12

Odp: Inna beczka

O ku&#!.....

Dzieki smile Przeslij zdjęcie wystawie ci ołtarz i świeczki w domu smile

I jeszcze raz dzieki za trud smile

A co sadzisz o klasie 'jezyk' i tam zdefiniowane stałe, tablice,funkcje. Wywolac to mozna przez Jezyk::blad(1) czy jakos w podobny sposob?

I jeszcze raz dzieki za test tongue

13

Odp: Inna beczka

Chyba nie myslisz ze klepalem tablice i definiowalem stale recznie ? tongue

Czy ja wiem czy trzeba do tego klase....  To raczej jednorazowy projekt wiec pewnie nie bedziesz jej wykorzystywal nigdzie indziej, rozwiazanie  i tak paskudne, wiec po co paskudzic je bardziej ? big_smile

14

Odp: Inna beczka

moze i racja ;]