Wielojęzykowość, Czekam na Wasze propozycje |
Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.
Wielojęzykowość, Czekam na Wasze propozycje |
1.04.2006, 18:29:19
Post
#1
|
|
Grupa: Moderatorzy Postów: 1 566 Pomógł: 37 Dołączył: 14.05.2003 Skąd: Kraków |
Witam,
Od jakiegoś czasu piszę duży projekt i doszedłem do wybierania języku. Chciałbym poznać Wasze zdanie jak ma działać taki system wielojęzykowości strony. Pobuszowałem po internecie i oto, co wymyśliłem.
Byłbym wdzięczny za propozycje rozwiązań. Wojtek. |
|
|
1.04.2006, 20:31:20
Post
#2
|
|
Grupa: Zarejestrowani Postów: 106 Pomógł: 3 Dołączył: 21.03.2006 Skąd: Sosnowiec Ostrzeżenie: (0%) |
Myślę ze dobrym rozwiązaniem są pliki. Stosuje sie je w wielu cmsach i projektach.
Tłumaczenia w bazie danych to według mnie zaśmiecanie db i w dodatku majac wiele jezykow robi sie syf i przedluza sie czas wyszukiwania. Tutaj nalezy zadac pytanie jak stworzyc taki plik. Czy ma byc to plik php w ktorym definiuje się zmienne/stałe czy zwykły plik tekstowy typu Kod ERROR_CONNECTION=bład przy polaczeniu z baza; ERROR_SELECT_DB=bład przy wybieraniu bazy; itp... Nie wiem co jest bardziej wydajne, jednak jesli chcemy zeby naszych jezykow nikt nie "podgladal" no to php |
|
|
2.04.2006, 09:19:58
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 384 Pomógł: 6 Dołączył: 11.09.2004 Skąd: Grodzisk Mazowiecki Ostrzeżenie: (0%) |
jeżeli w projekcie masz zamiar używać OPT, to ja na twoim miejscu użył bym opt'owego i18n ;]
-------------------- |
|
|
2.04.2006, 09:59:36
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 597 Pomógł: 30 Dołączył: 19.02.2003 Skąd: Tychy Ostrzeżenie: (0%) |
Smarty: {config_load file="text.conf" section=$language} no i posprzątane
-------------------- Zapraszam na mój php blog, tworzenie stron.
|
|
|
7.04.2006, 00:59:47
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) |
Ja korzystam z modifiera SMARTY
Przepuszczam to przez modifier lang z paramtrem admin. -------------------- Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
|
|
|
7.04.2006, 07:27:19
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 660 Pomógł: 13 Dołączył: 9.06.2004 Skąd: Wrocław i okolice Ostrzeżenie: (0%) |
A ja się bawię "słownikiem" - mam plik lang_pl.php, lang_en.php itp..... w bazie trzymam dla jakiego użytkownika jaki plik załadować (oczywiście to może później sobie zrobić). W plikach tych mam tablicę $Lang:
i tak plik normalnie includuje.... -------------------- |
|
|
7.04.2006, 10:15:48
Post
#7
|
|
Grupa: Zablokowani Postów: 46 Pomógł: 0 Dołączył: 12.01.2006 Ostrzeżenie: (10%) |
Ja z kolei napisałem sobie plugin do Smartego. Templejty tworzę normalnie, używając naszego narodowego języka. Mam również plik XML, który nazywa się identycznie jak nazwa szablonu czy też modułu szablonu i zawiera tłumaczenia tekstów z templejta w wielu językach.
Np.: Moduł szablonu: menu.mod.tpl Kod <div> <a href="home.php" title="Moja strona domowa">strona domowa</a> </div> Plik XML zawierający tłumaczenie: Kod <translations> <translation> <source>Moja</source> <en>My</en> </translation> <translation> <source>strona domowa</source> <en>home site</en> </translation> </translations> Plugin Smartego po skomiliowaniu szablonu zamienia wszystkie teksty, które są uwzględnione w pliku XML (sekcja source) na żądany język. Ma to dwie ogrome zalety: - w połączniu z keszowaniem parsowanie xml-u nie jest aż tak uciążliwe dla systemu - mój tłumacz nie musi znać się na php (aplikacja), HTML (templejty); ba! nawet nie zagląda do tych plików - ma swój katalog, do którego wrzuca pliki XML Ten post edytował eMartio 7.04.2006, 10:17:59 |
|
|
9.04.2006, 17:09:41
Post
#8
|
|
Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) |
I ma taką wadę, że języki są różne i różną mają gramatyke... twoim sposobem czesto zdażyć się może, że nie da się w prosty sposób przetłumaczyć danego zdania.
-------------------- |
|
|
9.04.2006, 18:36:07
Post
#9
|
|
Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 19.01.2005 Skąd: Warszawa Ostrzeżenie: (0%) |
http://developer.gnome.org/projects/gtp/tr...-gnome/x22.html - pliki .po i ich dekoder napisany przez Bastiona to całkiem dobre rozwiązanie.
Fajnie też rozwiązał to NuLL, ale pliki .PO są bardzo popularne, istnieje też wiele programów służących do ich edycji, co upraszcza tworzenie nowych wersji językowych. gTranslator i KBabel, for example. -------------------- |
|
|
12.04.2006, 15:10:53
Post
#10
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 6.04.2006 Ostrzeżenie: (0%) |
Cytat(TomASS @ 2006-04-07 06:27:19) A ja się bawię "słownikiem" - mam plik lang_pl.php, lang_en.php itp..... w bazie trzymam dla jakiego użytkownika jaki plik załadować (oczywiście to może później sobie zrobić). W plikach tych mam tablicę $Lang:
i tak plik normalnie includuje.... wydaje mi się, że to jest dobry pomysł. ja tak robię. choć lepszym sposobem jest napisanie $lang = array( 'czesc' => 'eloza', 'czlowiek' => 'ziom' ); może się czepiam, ale sposób pisania TomASS'a jest jednak bardzo nieefetywny. php to nie C w php'ie najlepiej robić wszystko w jednej komendzie. choć szacun dla Niego, Jego squadu i Jego samicy za sposób robienia słownika podoba mi się z resztą ten sposób jest użyty także w sugarCRM. Ten post edytował 3rdeye 12.04.2006, 15:11:27 -------------------- czasami poprostu brakuje kamieni
|
|
|
12.04.2006, 19:49:35
Post
#11
|
|
Grupa: Zarejestrowani Postów: 487 Pomógł: 7 Dołączył: 7.01.2004 Skąd: Warszawa Ostrzeżenie: (0%) |
Ja ze swojej strony mogę polecić draft i18n z Mojavi 4, całość prezentuje się iście interesująco.. niestety w chwili obecnej serwer Mojavi leży..
-------------------- Łukasz Dywicki
Independent Java and open source software consultant. Blog - Java, OSGi, integracja oprogramowania.. |
|
|
12.04.2006, 20:15:15
Post
#12
|
|
Grupa: Zarejestrowani Postów: 449 Pomógł: 0 Dołączył: 26.05.2004 Skąd: Nowy Sącz Ostrzeżenie: (0%) |
Ja mam strony wielojezykowe zrobione na podstawie bazy danych i dosłownie zero tekstu w kodzie html. Struktura plikow php wyglada podobnie jak bym smarty zastosowal.
Jeden minus to ze jest duzo zapytan do bazy i moze stanowic obciazenie przy wiekszym serwisie. Ale wtedy juz prosto mozna zastosowac cachowanie stron. -------------------- |
|
|
13.04.2006, 08:45:23
Post
#13
|
|
Grupa: Zarejestrowani Postów: 216 Pomógł: 0 Dołączył: 9.08.2003 Skąd: Warszawa Ostrzeżenie: (0%) |
Ja osobiscie korzystam z plikow ini. Plik jezykowy globalny, + pomniejsze pliki jezykowe np: do konkretnego modulu. W Smarty korzystam z postfilter ktory podmienia odpowiednie ciagi znakow na wartosci np: [lang:mod_news,dodaj] na "Dodaj newsa"
|
|
|
13.04.2006, 14:54:21
Post
#14
|
|
Grupa: Zarejestrowani Postów: 476 Pomógł: 1 Dołączył: 5.11.2005 Skąd: Bieruń city Ostrzeżenie: (0%) |
ja wczytuje zawartosc pliku ini dla wybranego jezyka do tablicy (parse_ini_file) a potem po prostu:
{$lang[costam][costam]} -------------------- |
|
|
16.04.2006, 13:53:05
Post
#15
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 25.01.2004 Skąd: Świętochłowice Ostrzeżenie: (0%) |
Moim zdaniem prawda znowu leży po środku - wydaje mi się, że pliki są bardzo dobrym rozwiązaniem, jeśli chodzi o teksty formularzy itp. Jednak co, jeśli ktoś będzie chciał tłumaczyć całe artykuły, znajdujące się w bazie? Wtedy najlepszym rozwiązaniem byłoby połączenie systemu pliki+baza.
Wydaje mi się, że można by stworzyć tabele osobno dla każdego języka, np. en_articles, pl_articles itp., bo trzymanie tych danych w jednej tabeli nie miałoby raczej najmniejszego sensu, skoro i tak są one wykorzystywane naprzemiennie, a nie razem. PS. Nie jedźcie po mnie za bardzo, bo ostatnio w php coś pisałem chyba z pół roku temu:) I wesołych świąt wam życzę. -------------------- “Twój czas jest ograniczony, więc nie marnuj go żyjąc tak jak inni. Nie daj się znaleźć w potrzasku przez dogmaty, którymi żyją. Nie ulegaj opiniom, które zagłuszą twój wewnętrzny głos. I najważniejsze, miej odwagę pójść za twoim sercem i intuicją. Wszystko inne jest mniej ważne.”
Steve Jobs |
|
|
16.04.2006, 15:33:53
Post
#16
|
|
Grupa: Zarejestrowani Postów: 398 Pomógł: 10 Dołączył: 24.11.2004 Skąd: Łódź Ostrzeżenie: (0%) |
Cytat(krzemian @ 2006-04-16 12:53:05) Wydaje mi się, że można by stworzyć tabele osobno dla każdego języka, np. en_articles, pl_articles itp., bo trzymanie tych danych w jednej tabeli nie miałoby raczej najmniejszego sensu, skoro i tak są one wykorzystywane naprzemiennie, a nie razem. Ja osobiście trzymam wszystko w jednej tabeli, w której mam kolumnę "Lang" określającą w jakim języku jest dany wiersz czyli np:
Potem w zalezności od wybranego języka wybieram potrzebne dane np.:
Jeżeli natomiast chodzi o stałe teksty typu: "Więcej", "Strona głowna" to trzymam je w XML - ach gdzie struktura plików jest następująca: Kod languages en Translation.xml pl Translation.xml parsuję XML z wykorzystaniem PEAR::XML_Unserializer i podrzucam do smartów gdzie wyświetlam to:
Obecnie pracuję nad manadżerem do tłumaczeń - coś na zasadzie kompilacji XML - a do pliku w którym byłaby zserializowana tablica z tłumaczeniami. I jeżeli XML jest nowszy niż skompilowane dane to wtedy kompiluję jeszcze raz. Jeżeli nie to odczytuję i podstawiam zserializowaną tablicę -------------------- |
|
|
16.04.2006, 17:07:31
Post
#17
|
|
Grupa: Zarejestrowani Postów: 47 Pomógł: 0 Dołączył: 25.01.2004 Skąd: Świętochłowice Ostrzeżenie: (0%) |
Teraz tak myślę i doszedłem do wniosku, że twoj podejście jest chyba lepsze od mojego (jeśli chodzi o trzymanie w bazie, bo xml i pliki to dla mnie to samo - wszystko zależy od możliwości serwera itp) - zakładając, że chcę dodać kolejny język, przy twoim podejściu mogę (przynajmniej teoretycznie) dodać go z poziomu panelu, nie grzebiąc w strukturze baz.
-------------------- “Twój czas jest ograniczony, więc nie marnuj go żyjąc tak jak inni. Nie daj się znaleźć w potrzasku przez dogmaty, którymi żyją. Nie ulegaj opiniom, które zagłuszą twój wewnętrzny głos. I najważniejsze, miej odwagę pójść za twoim sercem i intuicją. Wszystko inne jest mniej ważne.”
Steve Jobs |
|
|
16.04.2006, 21:23:09
Post
#18
|
|
Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) |
A co wy na to (suma kilku pomysłów):
A plik translacji wyglądałby oczywiście Kod TEXT1=BlaBlaBla Taka synteza paru pomysłów - prosta i szybka implementacja.TEXT2=Myślę więc jestem TEXT3=W matematycie wiem, że 2*2=4! Do drugiej metody (tej z tablicami), wyglądałobyto oczywiście analogicznie Kod MAIN.TEXT1=BlaBlaBla MAIN.TEXT2=Myślę więc jestem MAIN.TEXT3=W matematycie wiem, że 2*2=4! To oczywiście tylko dla małych tekstów dla tworzenia innojęzycznych wersji serwisów. Dla mniejszycg napisów, dla których nie chcemy marnować cennych id w bazie danych. Bo co do większych napisów zgadzam się z przedmówcami. Ten post edytował Jabol 16.04.2006, 21:40:21 |
|
|
17.04.2006, 14:11:06
Post
#19
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) |
Cytat(Jabol @ 2006-04-16 21:23:09) A plik translacji wyglądałby oczywiście Kod TEXT1=BlaBlaBla Taka synteza paru pomysłów - prosta i szybka implementacja.TEXT2=Myślę więc jestem TEXT3=W matematycie wiem, że 2*2=4! Do drugiej metody (tej z tablicami), wyglądałobyto oczywiście analogicznie Kod MAIN.TEXT1=BlaBlaBla MAIN.TEXT2=Myślę więc jestem MAIN.TEXT3=W matematycie wiem, że 2*2=4! To nie lepiej użyć poprostu plików ini ? Podczas moich praktyk w firmie gdzie brałem udział w tworzeniu aplikacji w springu (java) był stworzony plik (nie pamiętam jakie miał rozrzeszenie może .properties czy cuś) ale wyglądał on niej więcej : main.welcome = Witam main.menu = Menu itp. |
|
|
17.04.2006, 14:24:45
Post
#20
|
|
Grupa: Zarejestrowani Postów: 691 Pomógł: 0 Dołączył: 19.01.2005 Skąd: Warszawa Ostrzeżenie: (0%) |
A co, jeśli w tłumaczonym tekście wystąpi znak "=" bądź przełamanie linii?
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 24.09.2024 - 21:28 |