konto usunięte

Temat: Portal w kilku językach - jak to zrobić?

Witam serdecznie :)

Mam pytanie do ekspertów odnośnie tworzenia portali w kilku językach. Nigdy czegoś takiego nie robiłem i postanowiłem obecną wersję strony zrobić w języku niemieckim oraz angielskim.

I moje pytanie brzmi jak to się robi?
Czy dobrze się to pozycjonuje? (czytałem że są problemy)
W jaki sposób trzymać pliki na serwerze? (w każdym folderze osoba wersja strony? /pl/ /en/ /de/ ?)
Jak z bazą danych? chciałbym mieć opisy "produktów" w trzech językach. wszystko trzymać w jednej bazie? czy zrobić nowe tabele produkt_pl produkt_en produkt_de ?


oczywiście chciałbym zrobić aby domeny
domena.net odpowiadała /en/
domena.de odpowiadała /de/
domena.pl + domena.com.pl /pl/

Jeżeli macie pojęcie i wiecie jak to działa byłbym wdzięczny za każde informacje. Może sami prowadzicie tego typu strony?

Z góry dziękuję i oczekuję ciekawej rozmowy :)
Bartek B.

Bartek B. PHP, SQL

Temat: Portal w kilku językach - jak to zrobić?

Tabele itp zostaw dodaj tylko pola jak masz opis to dodaj opis_en czy opis_de.

/pl/ itp obsłużysz przez .htaccess
obierasz jeden język podstawowy jak jest puste

a jak chcesz wg domen to wykorzystaj zmienną $_SERVER['SERVER_NAME']
z niej odczytasz na jakiej domenie user siedzi.Bartek Bujnowski edytował(a) ten post dnia 08.09.09 o godzinie 12:49

konto usunięte

Temat: Portal w kilku językach - jak to zrobić?

A nie lepiej stworzyć tabelę typu:

ID, Tytuł, Treść, Język

?
Bartek B.

Bartek B. PHP, SQL

Temat: Portal w kilku językach - jak to zrobić?

Kamil Brenk:
A nie lepiej stworzyć tabelę typu:

ID, Tytuł, Treść, Język

?

I wtedy z bazy zasysasz tylko z wybranego języka...
Ale w przypadku np sklepu gdzie masz jeden produkt i opis w 2-3 językach wygodniejsze jest rozwiązanie dodania pola opisu w innych językach

konto usunięte

Temat: Portal w kilku językach - jak to zrobić?

Bartek Bujnowski:

Ale w przypadku np sklepu gdzie masz jeden produkt i opis w 2-3 językach wygodniejsze jest rozwiązanie dodania pola opisu w innych językach

Dla każdego nowego języka należałoby więc modyfikować układ bazy danych. Wydaje mi się to niezbyt rozsądne, zwłaszcza, jeśli są alternatywne wyjścia polegające na dodaniu jedynie nowego rekordu z określonym językiem ;)

Ponadto produkty nie zawierające opisu w danym języku mogłyby mieć notkę w stylu "dla Twojego języka nie ma tlumaczenia; dostępne tłumaczenia tekstu: rosyjski, rumuński".Kamil Brenk edytował(a) ten post dnia 08.09.09 o godzinie 13:05

konto usunięte

Temat: Portal w kilku językach - jak to zrobić?

/pl/ itp obsłużysz przez .htaccess
obierasz jeden język podstawowy jak jest puste

a jak chcesz wg domen to wykorzystaj zmienną $_SERVER['SERVER_NAME']
z niej odczytasz na jakiej domenie user siedzi.


Nie wiem czy dobrze to wszystko rozumiem ale czy takie coś jest w porządku ?

główny katalog na serwerze = główny język ( u mnie PL)
do tego foldery /en/ i /de/ w których jest ta sama wersja strony skopiowana i cały html i inne teksty zmienione na dany język?

co do .htaccess to wykorzystać mógłbym np gdyby domena była .com i wtedy mógłbym zrobić odpowiednio pl.domena.com de.domena.com

tutaj właśnie chciałbym dla osobnych domen wykorzystać dany język.

Czy flagi do zmiany języków powinny mieć odnośnik domena.pl ? domena.de? czy domena.pl/de/ ?

konto usunięte

Temat: Portal w kilku językach - jak to zrobić?

Dla każdego nowego języka należałoby więc modyfikować układ bazy danych. Wydaje mi się to niezbyt rozsądne, zwłaszcza, jeśli są alternatywne wyjścia polegające na dodaniu jedynie nowego rekordu z określonym językiem ;)

Ponadto produkty nie zawierające opisu w danym języku mogłyby mieć notkę w stylu "dla Twojego języka nie ma tlumaczenia; dostępne tłumaczenia tekstu: rosyjski, rumuński".


strona będzie miała opisy wszystkich produktów w 3 językach, nie będzie czegoś takiego że dany produkt jest "pusty" bez opisu.
Bartek B.

Bartek B. PHP, SQL

Temat: Portal w kilku językach - jak to zrobić?

Od początku na spokojnie:

-2 domeny kierujesz w jedno miejsce
-przez $_SERVER['SERVER_NAME'] określasz na którą user wszedł i podajesz mu jaką stronę chcesz
*jeżeli to sklep to w głównym skrypcie zapisujesz sobie tą domenę albo od razu jaki powinien być język i przy zapytaniu do bazy pobierasz odpowiednie pola / tabele wykorzystując wiedze jaki ma byc język
*jeżeli to strona, która w różni się mocno to odpuść sobie to co napisałem i przekieruj domeny do dwóch różnych folderów
Piotr Baranowski

Piotr Baranowski Rozwiązuje problemy,
poprawiam świat,
chłonę wiedzę i
prz...

Temat: Portal w kilku językach - jak to zrobić?

Ostatnio robilismy cos takiego.
Najlepszym rozwiazaniem po wielu burzach mozgow wyszlo zrobienie id i id_lang w kazdej tabeli.
Opisy, ceny itp. moga sie roznic w zaleznosci od kraju.

Jedyny problem jest przy dodawaniu nowych rzeczy, trzeba robic transakcje i wyciagac max(id) (mySQL). Ale jak masz baze ktora obsluguje sekwencje niezalezne, to mozesz id wyciagac z takiej sekwencji.

Do tego tlumaczenia, mozesz zrobic to za pomoca np. gettext'a albo nawet tablicy asocjacyjnej (chodzi o stale teksty na stronie).
Wtedy wszystkie teksty zastepujesz kluczami, a klucz dopisujesz do arraya.
I masz np. <?php $translate->get('KLUCZ'); ?> ktore podmienia Ci sie na slowo 'klucz' w polskim, 'key' w angielskim itd.

W zaleznosci od tego jak ktos na Twoja strone wejdzie taki jezyk dostanie. Jego preferencje jezykowa mozesz zapisac w cookie.
W w headerze powinienec wrzucic linki do alternatywnych tekstow/produktow w innym jezyku - wtedy nie bedzie problemow z indexowaniem.
Mateusz K.

Mateusz K. Business Solution
Analyst, Damco
Poland Sp z o.o.

Temat: Portal w kilku językach - jak to zrobić?

W w headerze powinienec wrzucic linki do alternatywnych tekstow/produktow w innym jezyku - wtedy nie bedzie problemow z indexowaniem.

Mogę prosić o rozwinięcie tej myśli?
Mariusz Lewandowski

Mariusz Lewandowski Senior Java
Developer

Temat: Portal w kilku językach - jak to zrobić?

Przechodziłem przez problem tworzenia serwisu z wykorzystaniem i18n i l10n. Specyfika problemu obejmuje tlumaczenia statycznego contentu strony jak i rowniez dynamicznych tresci pobieranych z DB. W zaleznosci od wybranego jezyka programowania i dobranego business-case'a mozesz to zrobic na wiele sposob.

-Zalozmy ze robisz to w jakims frameworku PHP: tutaj na pewno wbudowana jest obsluga tlumaczen statycznego kontektu na stronie przez wbudowane funkcje tlumaczace (np. __() w cakephp..) oraz dolaczanie zasobow tlumaczen w plikach.

Jesli chodzi o baze danych to zalezy czy wymagasz od serwisu aby udostepnial na tej samej "podstronie" rozne opisy.. - ktos wchodzi pod link http://mojastrona.pl/produkt/perfumy/2 i zaleznosci od wybranej flagi udostepni mu sie opis PL/EN/DE - przy takim rozwiazaniu nalezy dodac pola typu desc_pl, desc_en, desc_de

Zaletami tego rozwiazania jest to, ze na jednej stronie mozesz gromadzic wiele roznych wersji jezykowych, natomiast wada moze byc to, dodajac kolejny jezyk musisz praktycznie zmienic wszystkie tabele wcalej bazie danych. Kolejna wada jest pobieranie calego wiersza z bazy (np 5 roznych jezykow) podczas kiedy strone odwiedza osoba poslugujaca sie tylko j. angielskim ...

Mozesz zrobic osobna tabele nazywajac ja i18n_langs i tam przechowywac klucz wlasny tabeli, klucz obcy do encji, nazwe modelu/encji, wybrany jezyk, nazwe pola oraz wartosc pola np:
1, 1, Produkty, PL, opis, "opis ..."

To rozwiazanie daje ci gwrancje dynamicznego dodawania jezykow do bazt oraz pobierania tylko tego co potrzebujesz. Jesli jestes jednak poczatkujacym programista odradzam ten sposob ze wzgledu na zloznosc z jaka mozesz sie spotkac podczas pobierania tabel laczonych + ich tlumaczen ..

Wracjac do konkretnego jezyka, PHP - na pewno tez znajdziesz plik z routingami - mozesz sobie dopisac routingi, w ktorych zawarta bedzie dwuliterkowa nazwa jezyka np strona.pl/pl/costam, storna.pl/en/costam ... Dodajesz konktroler, ktory bedzie sterowal kazda zmiana jezyka i zapisywal aktualnie wybrany jezyk np w sesji albo w ustawieniach zalogowanego usera - jak wolisz ..

Jesli projektujesz cos w Javie, w nowych frameworkach istnieje idea interceptora - tutaj mozesz ladnie zwrappowac logike odpowiedzialna za zmiane jezyka, jesli chodzi o adresy URL to interceptor tez tutaj sie sprawdzi b. dobrze.

Pozdrawiam!Mariusz Lewandowski edytował(a) ten post dnia 08.09.09 o godzinie 20:51
Piotr Baranowski

Piotr Baranowski Rozwiązuje problemy,
poprawiam świat,
chłonę wiedzę i
prz...

Temat: Portal w kilku językach - jak to zrobić?

Mateusz K.:
W w headerze powinienec wrzucic linki do alternatywnych tekstow/produktow w innym jezyku - wtedy nie bedzie problemow z indexowaniem.

Mogę prosić o rozwinięcie tej myśli?

Powiedzmy, ze jestes na stronie:

sklep.com/produkt/2 w swoim danym jezyku, powinienes w <head></head> wrzucic <link rel="alternate" hreflang="[2 znakowy kod jezyka]" href="[adres stronki w innym jezyku]"/>

Generalnie to co tutaj
http://www.w3schools.com/TAGS/tag_link.asp

I owszem, Mariusz ma racje, najpierw daj znac co umiesz i w czym robisz - bo od tego moga zalezec Twoje mozliwosci.
Marek Przegaliński

Marek Przegaliński SEO/SEM Web Promocja
Bezpieczeństwo

Temat: Portal w kilku językach - jak to zrobić?

Dariusz Podliski:
Witam serdecznie :)

oczywiście chciałbym zrobić aby domeny
domena.net odpowiadała /en/
domena.de odpowiadała /de/
domena.pl + domena.com.pl /pl/

Ja odpowiem od strony SEO :-)
Od programistycznej "teoretycznie" robisz dowolnie.
Praktycznie - osobne bazy, rozdzielne URLe, a nawet różne serwery. Czyli nie ma lekko. - każda witryna językowa zdecydowanie - POWINNA - wisieć na serwerze w danym kraju. Czyli niemiecka w DE, angielska w UK etc etc etc I to chyba "upraszcza" dyskurs. Inne rozwiązania są stosowane, ale są dalece nieskuteczne. Wyjątkiem są serwisy, w których obcojęzyczne wersje są "na wszelki wypadek". ... Ale jeżeli mają być naprawdę na pozycjach zagranicznych wyszukiwarek - innej drogi nie ma.........

Temat: Portal w kilku językach - jak to zrobić?

Zakładam, że piszesz w PHP (część mojego postu odnosi się do PHP)

Kodowanie: utf8 - zawiera znaki wszystkich języków.

Domeny: wszystkie wersje kierujesz na jeden katalog, w pliku index.php skanujesz na jakiej domenie jest użytkownik ($_SERVER['SERVER_NAME']) sprawdzasz w (wcześniej stworzonej) tablicy języków jaki ma numer dana domena i zapisujesz sobie numer tej domeny (języka) do jakiejś zmiennej, następnie wszystkie informacje będziesz wyświetlał w odniesieniu do tego numeru.

Konstrukcja bazy: radzę zapoznać się z normalizacją bazy danych ( http://pl.wikipedia.org/wiki/Normalizacja_bazy_danych )
dla przykładu produkty w sklepie internetowym powinny wyglądać tak:
products: product_id, category, company, name
products_desc: product_id, language_id, description
Oczywiście jeżeli nazwa produktu jest różna w różnych językach to powinna znaleźć się w products_desc.
Jak już wcześniej ktoś zauważył - dodawanie i usuwanie języka nie powinno modyfikować struktury bazy, dlatego dokładanie desc_pl, desc_en, desc_cokolwiek jest mocno niewskazane.

Teksty statyczne: najlepiej trzymać w plikach (aby nie zarzynać serwera ciągnięciem z bazy) może to być zwykła tablica w stylu:
$text[id_jezyka][slowo_klucz]='jakis tekst'. Wypisywanie na stronie jest proste, np. jak chcesz wypisać słowo "produkty" odwołujesz się do: $text[$lang_id]['products']. Możesz to oczywiście robić za pomocą swojej funkcji np. print_text($lang_id,$key_word) czy jak Ci wygodnie (polecam systemy szablonów np. Smarty).

W sprawie SEO: oczywiście oddzielne serwery w krajach są plusem jednak trzeba przemyśleć czy więcej będzie kosztowało kupowanie oddzielnych serwerów czy działania, które pozwolą to przeskoczyć (wzmocnione linkowanie, optymalizacja...) - przynajmniej w pierwszym okresie działania. Baza może spokojnie być jedna i w jednym miejscu, Google i tak się nie dowie z jakiej bazy korzysta strona - widzi tylko kod wynikowy i może sprawdzić ip serwera aplikacji (nie bazy).
Maciej Filipiak

Maciej Filipiak właściciel, VizMedia

Temat: Portal w kilku językach - jak to zrobić?

Kamil Brenk:
Dla każdego nowego języka należałoby więc modyfikować układ bazy danych.

Nigdy w życiu !!
jeśli są alternatywne wyjścia polegające na dodaniu jedynie nowego rekordu z określonym językiem ;)
mieć notkę w stylu "dla Twojego języka nie ma tlumaczenia; dostępne tłumaczenia tekstu: rosyjski, rumuński".

Częściej praktykuje się rozwiązanie, jeżeli brak opisu w danym języku to wchodzi opis standardowy czyli angielski albo rodzimy.

W ten sposób mamy masę portali gdzie na jednej stronie są opisy po polsku i jednocześnie po angielsku
(np helpy w google)
Rafał Kowalewski

Rafał Kowalewski IT Director, F3
Group

Temat: Portal w kilku językach - jak to zrobić?

Ja od lat stosuję stałą metodę, która jest skuteczna:

1. Dwa pliki PL.inc.php i EN.inc.php zawierjące klasę I18N która zawiera stałe tekstowe wyświetlające się na stronie. W szablonach mam więc <h1><?=I18N::TytulStrony?></h1>
2. W głównym pliku frameworka nastepuje "odgadnięcie języka" i include własciwego pliku językowego, przypisanie globalnej zmiennej $lang.
3. W bazie SQL są pola tresc, tresc_en, tresc_de.
4. Ładując zapytania w PHP daję SELECT tresc".$this->lang." AS tresc
5. Warto dawać też mądre selekty sprawdzające np. czy pola w danym języku istnieją. Jak mam listing newsów z bazy to sprawdzam, czy jest news w danym jezyku i tylko wtedy go printuję. Wtedy dla kazdego języka mam liste ktora w danym jezyku istnieje.

Każdy pewnie ma milion innych, lepszych sposobów, które w teorii są genialne, ja opieram się na praktyce i ten sposób działa.

Przykładem użycia jest http://cmrev.com => http://football-manager.info (sorki za spam). Po domenie odgaduje się język a reszta już robi się sama :)

Następna dyskusja:

Jak zrobić prezentację flash




Wyślij zaproszenie do