Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielojęzykowość
Forum PHP.pl > Forum > PHP > Pro
Stron: 1, 2, 3, 4
bim2
Wordpress jest najlepszym przykładem. smile.gif Ja także nie używam gettext(), jedynie się na tym wzoruje. Poszukać w google wystarczy "i18n php" i wyskoczy wiele różnych rozwiązań. Nawet na tym forum jakieś znalazłem smile.gif
viking
Ewentualnie w PHP 5.3 jest coś takiego http://pl2.php.net/manual/en/class.messageformatter.php
bim2
Tyle, że na php 5.3 na serwerach troche trzeba poczekać smile.gif Kolega robił update php wczoraj, ale na trójkę się nakłonić nie dał... nie wiem czemu ;/ ("bo wyszła dzisiaj")
erix
Dziwisz się? Osobiście np. Fx-a zaktualizuje za może miesiąc; obie paczki są jeszcze za świeże, nie zostały wystarczająco przetestowane.

Wyjdzie 5.3.1, będzie można się nieco pobujać. [; Ale nie zmieni to faktu, że w ogóle na edycję 5.3 trzeba jeszcze poczekać co najmniej pół roku.
omeck
Tak, do zalet gettext należy to, że jest lekki, szybki praktycznie ogólno dostępny... ale przekonaj klienta, żeby pobrał sobie z serwera pliczek z tłumaczeniami, pobrał i zainstalował sobie dodatkowe oprogramowanie np. poedit, wyedytował, a następnie wysyłał na serwer. Można też zrobić interfejs do aplikacji i generować np poprzez jakiś panel admina... jest jendno 'ale' - generowanie plików z tlumaczeniami, co wiąże się z dostepem do poleceń systemowych na serwerze... chyba malo ogolno dostępne, prawda? :-)
Dodatkowo: http://us2.php.net/manual/en/ref.gettext.php#50424 ;-)

Osobiście szczęśliwie korzystam z Zend_Translate oraz pliczków CSV - lekkie, proste, szybkie, wygodne i można bez zadnych przeszkód napisac do tego gui :-)
Pr0100
Cytat
Tyle, że na php 5.3 na serwerach troche trzeba poczekać Kolega robił update php wczoraj, ale na trójkę się nakłonić nie dał... nie wiem czemu ;/ ("bo wyszła dzisiaj")


http://packages.debian.org/search?keywords...amp;section=all

dziwisz się mu? winksmiley.jpg

PS: przepraszam za OT
omeck
Cytat(Pr0100 @ 7.07.2009, 03:07:41 ) *


Jeśli ktoś na gwałt potrzebuje paczki z PHP5.3 do Debiana, to jest dostępna na: http://www.dotdeb.org/2009/07/03/php-5-3-0...r-debian-lenny/. Koniecznie należy przeczytać "What are the changes from Dotdeb?"

PS: przepraszam za OT +1 ;-)
erix
Cytat
do poleceń systemowych na serwerze... chyba malo ogolno dostępne, prawda? :-)

Serwery, których admini wiedzą, co to znaczy suPHP + jail dla procesu, nie mają zablokowanych poleceń systemowych. tongue.gif
omeck
Cytat(erix @ 7.07.2009, 23:02:33 ) *
Serwery, których admini wiedzą, co to znaczy suPHP + jail dla procesu, nie mają zablokowanych poleceń systemowych. tongue.gif


Jaki to promil wszystkich adminów? :-)
erix
Jakoś we wszystkich hostingach, z którymi mam do czynienia, polecenia systemowe nie są zablokowane.

Więc śmiem twierdzić, że to nie jest promil. tongue.gif
witul
A ja stosuje podzial na baze i pliki:
np w cmsie zrobilem sobie ze jezyk jest subdomena serwisump, en.domena.pl czy de.domena.pl.
Szablony stron, teksty i inne elementy pisane sa osobno pod kazdy jezyk.
A jesli chodzi o statyczne teksty typu "Zapisz", "To pole jest wymagane" - wiadomo, pliki.
jolam
Chciałam się poradzić w jednej sprawie dotyczącej spraw wielojęzykowości. Mam stronę w kilku językach, ale podstrony w tych językach niewiele różnią się od siebie. Strona zawiera głównie grafiki. To czy lepiej tłumaczyć fraz na tej stronie czy całą stronę. To znaczy, czy lepiej w kodzie tej strony, między grafikami mieć np $lang['tlumaczonytekst'], czy trzymać w bazie treść strony dla każdego języka i ładować odpowiednią stronę w zależności od wyboru usera? Teraz stosuje pierwsze rozwiązanie ale może tabela kolumnami textid, contentpl, contenten? Czy powinnam zastosować drugie rozwiązanie czy pozostac przy pierwszym?

pozdrawiam Jola

Zapomniałam napisać wprost, przy tej mojej metodzie z jedna stroną i tłumaczeniem fraz mam dużo małych zapytań do bazy. Gdybym zmieniła metodę to miałabym jedno duże zapytanie. Ale musiałabym mieć dwie treści i modyfikacje wprowadzać dwa razy i pamiętać o nich. Co lepsze?
erix
A przeczytałaś cały wątek? tongue.gif
rzymek01
W Twoim przypadku 1. sposób wydaje się lepszy, tylko od razu pobieraj wszystkie langi (dużo ich na pewno nie masz) albo zapisuj je w pliku (lub plikach jak chcesz podzielić na moduły)
jolam
Oczywiście, że przeczytałam ten wątek, co za pytanie. Chcę się jedynie upewnić. Sposób 1 wydaje mi się wygodniejszy, dlatego go wybrałam. Ale obawiałam się o wydajność. Bo to kilka/kilkanaście zapytań do bazy, zamiast jednego dużego.

pozdrawiam Jola
GregoryW
Korzystał ktoś kiedyś ze Smarty Multilanguage? Jeśli tak - jaką to ma wydajność?

Dzięki za info
nospor
Pytanko/dylemat:

Zaznaczam od razu, że nie chodzi mi o artykuły/newsy. Chodzi mi o komunikaty w stylu: "dane zapisano", "Dodaj komentarz" etc.

Do tej pory miałem to w plikach .ini i było wszystko ok. Stanąłem jednak przed problemem, gdzie będę musiał dać klientowi możliwość edycji tych danych w panelu serwisu. Babranie się tu w edycję plików i do tego sensownie to grupować już nie jest takie fajne i przyjemne jak wówczas, gdyby to było wszystko bazie.
Do tego dochodzi problem, że ja mogę uaktualniać moduły i wraz z modułem mogą się uaktualnić pliki z tekstami. Jeśli klient by coś już zmodyfikował to ja przy aktualizacji bym mu to nadpisał.

A więc możliwe dwa rozwiązania:
1) pliki .ini
piszę jakiś systemik do aktualizacji danych. minusem będzie to, że gorzej się go będzie pisało niż dla DB
gdy klient zmodyfikuje jakiś zestaw danych, tworzony jest dodatkowy plik .ini z jego zmianami.
Gdy system będzie musiał odczytać jakiś tekst, szuka go najpierw w plikach zmodyfikowanych a jeśli tam go nie będzie, szuka w moich oryginalnych.
Jak widać trochę latania przy pobraniu tekstu tu będzie. Powiedzmy że bym zastosował cache to może by było znośnie.

2) tłumaczenia w bazie
O optymalność się nie martwie bo bym cacheowal.
Napisanie systemiku do edycji - w miarę proste.
Gdy ja dostarcze aktualizacje modułu z nowymi tekstami to wystarczy wykonać parę insertów i po sprawie - nic nikomu nie nadpiszę.
Minus - całe zarządzanie mam już na plikach .ini i bym musiał do bazy wrzucić wszystkie tłumaczenia jakie do tej pory mam.


Co Wy sądzicie o tym? Mieliście już do czynienia z taką właśnie sytuacją, że trzeba dać klientowi narzędzie do modyfikacji tekstów i mieć na uwadze kolejne aktualizacjie oprogramowania wraz z tekstami?
vokiel
Jeszcze nie miałem takiej konieczności, jednak IMHO łatwiej byłoby w bazie.
  • Przy dodawaniu nowych wpisów, nie ma ryzyka, że nadpisze się już istniejące.
  • Ewentualne zmiany większej ilości wpisów są szybsze i łatwiejsze.
  • Dochodzi możliwość kontroli co kto zmienił, szybkiego wyszukania wpisów edytowanych przez klienta.
  • Dzięki powyższemu, w trakcie aktualizacji można wyświetlić wpisy, które były edytowane przez klienta, i zestawić mu je z propozycjami tymi od aktualizacji.
  • Nie wiem, czy będziesz potrzebował, ale w przypadku zdalnych poprawek, dostęp do db jest według mnie wygodniejszy niż wysyłanie plików via @, czy przez ftp.
  • Może się chyba zdarzyć, że aktualizacja rozszerzy dany wpis o coś nowego, wtedy poprzednia zmiana klienta nie będzie już aktualna i zestawienie mu danych, które mogą wymagać poprawy, lub po prostu zaakceptowania nowej wersji byłoby wygodne.
Co do dodania już istniejących tłumaczeń do bazy, to w końcu tylko jednorazowa operacja. Ważne aby później było łatwiej korzystać z systemu.

W zasadzie, czy zrobisz to na ini, czy db, to i tak spełni swoje zadanie. Różnice mogą być w czasie potrzebnym na napisanie, a będą w przypadku późniejszych zmian.
nospor
Rozpisałeś mi tutaj zaawansowany system w DB: akceptacja, zestawienia.... aż tak bardzo nie chciałem szaleć winksmiley.jpg
No nie rozwiałeś moich wątpliwości. To teoria, z której zdaję sobie sprawę. Mam nadzieję, że ktoś praktycznie miał z tym do czynienia.

edit:
dobra, robie na bazie. na plikach już mam to trzeba zadbac o nowe doświadczenia winksmiley.jpg
nasty
A może zastosuj bazę i zrób małego bota co Ci wrzuci wszystko z tych .ini do bazy? smile.gif
nospor
juz przepisałem ręcznie smile.gif
bim2
Wszyscy się zastanawiają jak robić tłumaczenie, ale najprościej moim zdaniem zrobić podobnie jak ma wordpress. Sam tworzyłem teraz czterojęzyczny serwis i wychodzi, że najprościej jest dać np. w templatkach
Kod
<p>__Tekst__</p>
<p>__Tekst ze zmienna %s czegos__($zmienna)</p>

Dzięki temu jest nawet możliwość poprawy literówek już na poziomie bazy danych, nie plików bo kluczem jest md5(). Tak więc, dzięki temu jestem w stanie poprosić kilkoro ludzi do poprawiania literówek i tworzenia tłumaczeń bez konieczności szukania tego po plikach.
cojack
Dla statycznych tekstów najlepiej jest użyć gettext. A dla trzymanych w bazie to l18n
bim2
Hmm, ja miast gettext korzystam z własnego sytemu z racji tego, że były problemy z tym gettext. Cachowało mi jakimś cudem plik i nie było możliwośći wgrania najnowszwego pliku. Co do danych typu newsy, mam kolumnę lang i później w zapytaniach where :langW: tzn. where lang = 'pl' winksmiley.jpg
cojack
Dokładnie, to żadna sztuczka ta wielojęzyczność. Mi tam gettext działa bez problemu, tylko to trochę upierdliwe jest z tymi tłumaczeniami ;p trzeba się opisać jak głupi winksmiley.jpg
Crozin
@bim2: chyba osobną tabelę łączoną w relacji 1-1 (z id oraz językiem), a nie samą kolumnę smile.gif
bim2
No tak. smile.gif Zależy co masz. Jak mam stronę statyczną gdzie występuje tylko Tytuł i Treść to mam jedną tabelę, bo tytuł też tłumaczymy smile.gif A id takie samo.
jmail
nie wiem czy ktoś już to pisał :F

ja mam różne języki zapisane w tablicach php winksmiley.jpg i je wrzucam do templatki tak jak pozostałe zmienne. Kwestia pobrania odpowiedniego pliku językowego
bim2
jmail także tak miałem, ale po n serwisach to jest niewydajne w trakcie pisania tego. Musisz dodać sobie do tablicy wpis, później w templatkach {$lang.user} Tylko nie wiesz ci kryje się pod user jakbyś chciał coś zmienić/dodać.

Gettext jest najlepszym wyjściem i radzę Ci się na to przerzucić.
jmail
no jak tam kto uważa. dla mnie to jest wygodne i wydajne nie miałem jakoś probolemów do tej pory i jakoś tam działało biggrin.gif ale przejrzę to co proponujesz i zobaczymy
marcio
Ok przeczytalem caly watek wywnioskowalem troche z niego tworzac wlasny "Fw" mysle ze przyda sie standartowa implementacja wielojezykowosci.

Dla stalych tresci zrobie to porostu tak:

Mam komponent news i jego opis autor,data,tresc i tytul i katalog jego widokow czyli:

Kod
|components

||views

|||News

||||Admin

|PL

|Eng

||||User

|PL

|Eng


No i na podstawie zmiennej sesyjnej wczytam odpowiedni widok z odpowiedniego katalogu(implementacja wczytywania w klase View a jezyku w innej)

Wydaje mi sie to wygodne,elastyczne i shcludnie wyglada.




Co do tresci np zawsze naszych news'ow zrobie to tak jak pokazal to @rzymek01 w poscie http://forum.php.pl/index.php?s=&showt...st&p=476814 podpunkt:

Cytat
dla elementów dynamicznych (każdy język -> taka sama treść):


Zaprezentowany rozniez przez Kayne.




Co jednak dla wyswietlania bledow w kilku jezykach bo tego nie zrozumialem albo nie doczytalem jak to osiagnac powiedzmy ze ktos chce sie zalogowac jak w przypadku danego jezyka wyswietlic komunikat w odpowiednim jezyku myslalem by zrobic katalog errors w katalogu widoku danego komponentu/pluginu a nim tablice typu:

  1.  
  2. $err['pl']['badpwd'] = 'Zle haslo';
  3.  
  4. $err['eng']['badpwd'] = 'Bad login';
  5.  


Wtedy w kontrolerze komponentu/pluginu robic:

  1.  
  2. if(blad podczac logowania) $view -> AddVar('error', $lang -> errors[$lang -> getLang()]['badpwd']);
  3.  


Wydaje mi sie rozsadne czy sie myle moze zabardzo zamotane i zaduzo jest kalogow plikow czy cos?

bim2
Ja byłbym nadal za i18n, nawet dla błędów smile.gif czyli $lang->get('Wrong login.');
marcio
Czyli jak i gdzie zapisywac bledy?

Bo nie rozumiem.

bim2
Nigdzie. Piszesz błąd jaki wystapił a tłumaczenie działa na zasadzie tłumaczenia całych fraz. Tj. ja mam w bazie danych tabelę langs z kolumnami hash|pl|en|pt|es Hash to md5 frazy, a reszty się chyba łatwo domyślić. Wszędzie piszę domyślnie po polsku czyli jak mam błąd to robię
  1.  
  2. $form->addError($lang->get('Niepoprawne hasło.'));

I później sprawdzam czy w bazie jest hash = md5($fraza) Jeśli nie ma dodaję ją do bazy z hashem i wypełnionym polem pl. Później tłumaczenie to zmiana en pt lub es. smile.gif
marcio
Wole to trzymac w plikach tongue.gif i zrobic tak jak ja to rozpisalem.

P.S ale dzieki za nastepna metode
bim2
Po 5 zleceniach odechciewa się szukania języków po plikach, sprawdzania poprawiania. Po przerzuceniu się na ten sposób odczujesz wielką ulgę smile.gif Naprawdę, przestaw się już teraz będzie mniej problemów później :]
marcio
Kazdy komponent/plugin bedzie mial katalog errors a w nim plik z o nazwie takiej samej jak nazwa komponentu/pluginu dane bede zapisywane tak jak podalem wyzej wiec na to samo wychodzi czy pliki czy baza jeden kit.

Tak samo biblioteka tez bedzie mogla miec wlasne bledy w roznych jezykach jesli zajdzie taka potrzeba np lib do upload'u/download'u

bim2
Pomyśl, że chcesz później dodać kolejny język i dać możliwość grupie tłumaczy tłumaczenia tego. Jak to rozwiążesz?
marcio
Dam im plik z errors i do tego pliki widokow a dane dynamiczne jak news'y etc.... to wiadomo.
bim2
Taaak, rozdziel to dla kilku tłumaczy smile.gif Nie będzie tak łatwo. Zresztą przy n modułach kopiuj sobie wszystkie pliki itd.
marcio
Mysle ze przy latwych stronach metoda moze sie sprawdzic jak nie zawsze bede mogl zmienic implementacje klasy language i tyle smile.gif
Crozin
Trochę zeszliście Panowie z tematu... smile.gif

A co do tematu jak tym zarządzać, to... nie ma tematu - przygotowanie prostej aplikacji, która udostępniłaby jakiś w miarę przyjazny tłumaczowi interface to kwestia powiedzmy godzin, by było to w miarę dopracowane.

Jeżeli natomiast chodzi o format przechowywania danych w plikach tekstowych to wartym rozpatrzenia formatem jest oparty o XML XLIFF. Z własnego doświadczenia niewiele mogę powiedzieć o współpracy z tłumaczami przy wykorzystaniu tego formatu, ale ponoć istnieje trochę gotowych aplikacji do operowania na tym i inne firmy chętnie z tego korzystają.
nowy_pehapowiec
Nie wiem na ile moje pytanie pasuje do reszty postów wątku ale:

Czyli lepiej tworzyć adresy z oznaczeniem języka jako subdomena czy nie?

www.strona.com/en/super/hiper/podstrona
czy
www.en.strona.com/super/hiper/podstrona

questionmark.gif

pozdro
marcio
Co do subdomen czy ogolnie jezyka w url wiem jedno jest to o tyle lepsze ze poprzez url uwzgledniamy odrazu jezyk strony dla user'a bez zadnego wybierania tzn jak wysle link strony php.pl koledze ten nie zna jezyka pl wiec musi wybrac jezyk poprzez podanie mu adresu w stylu www.php.pl/index.php/en/ lub www.en.php.pl user nie musi juz nic zmieniac.

Wedlug mnie zalezy tez ile subdomen masz do dyspozycji i ile jezykow chcesz zaimplementowac.

Jednak sam wyslucham opini innych by wiedziec w czym jeszcze moze sie przydac.

nowy_pehapowiec
Język w ogóle nie musi być widoczny w adresie. Dla użytkownika nie będzie to miało znaczenia, bo przed wyświetleniem czegokolwiek trzeba sprawdzić jakie języki akceptuje przeglądarka usera, w jakiej kolejności itd. A jak był na naszej stronie to odczytujemy jego ciasteczko. Czyli ten sam adres pokaże stronę w różnych językach w zależności od użytkownika. Ale myślę, że dla google lepiej rozróżniać język w adresie. Choć mechanizm pozostaje ten sam: użytkownik trafia na stronę strona.com i tam jest przekierowywany na np strona.com/pl/. Ale właśnie czy lepiej język do adres dodac jako subdomenę czy po nazwie domeny? Co o tym myślicie?
bim2
Ja jestem za subdomenami, ale tylko ze względów estetycznych. Nie widzę różnicy między pl.strona.com en.strona.com a strona.com/pl/ strona.com/en/
Crozin
Cytat
Język w ogóle nie musi być widoczny w adresie.
Dlaczego? Będę chciał koledze przesłać linka do jakiegoś artykułu w wersji angielskiej... No niestety będę musiał napisać: wejdź na URL i zmień sobie język na angielski, zamiast: wejdź na URL.
melkorm
Język powinien być w adresie,a moim zdaniem najlepiej jak jest w subdomenie, szczególnie dla wyszukiwarek : szukamy na angielskim google mamy en.adresstrony.xx a na polskim pl.adresstrony.xx itp więc moim zdaniem jest to największa przewaga tego typu rozwiązania + indeksowanie treści, google będzie miało ten sam adres przy zmianie treści więc zaindeksuje tą treść raz (w przypadku braku języka w adresie).

P.S. Nie jestem w tym specjalistą i to są tylko moje luźne spostrzeżenia smile.gif
P.S. Szczerze chciałbym usłyszeć pogląd specjalisty od pozycjonowania na temat : "Językowość, a wyszukiwarka."
nowy_pehapowiec
A może jednak w ogóle nie uwzględniać języka w adresie strony? Wystarczyłoby sprawdzić jaki jest język przeglądarki i na podstawie tego poprzez sesje albo ciasteczka automatycznie wyświetlać treść w odpowiednim języku. I też user nie musi nigdzie klikać, chyba, że zechce. Wtedy wszystkie linki przychodzące byłyby do jednej strony a nie byłyby rozdzielone na dwie strony o różnych adresach. Ale co z indeksacją strony? Czy google będzie raz indeksować dla en a raz dla pl?

pozdro
Riklaunim
Będzie zmienna treść co jest trochę bez sensu. Można wykorzystać język przeglądarki, ale nie jest do pewne rozwiązanie. Najlepsze to dwie oddzielne pod/strony - łatwe zarządzanie i obie z nich mogą mieć różną zawartość.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.