Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielojęzykowość
Forum PHP.pl > Forum > PHP > Pro
Stron: 1, 2, 3, 4
nowy_pehapowiec
Riklaunim treści przecież mogą być różne. W bazie mogą być pole z treścią w kilku językach. A i szablony i style mogą być ładowane różne dla różnych języków. I to nawet dobrze działa, ale ma ten minus zmiennej treści, o czym pisałeś. Czy wiesz jak google indeksuje taką stronę?

pozdrawiam
Riklaunim
Cytat(nowy_pehapowiec @ 26.04.2010, 16:47:53 ) *
Riklaunim treści przecież mogą być różne. W bazie mogą być pole z treścią w kilku językach. A i szablony i style mogą być ładowane różne dla różnych języków. I to nawet dobrze działa, ale ma ten minus zmiennej treści, o czym pisałeś. Czy wiesz jak google indeksuje taką stronę?

pozdrawiam


Jeżeli pod jednym linkiem możesz mieć różne treści to poprawnie tego nie zindeksuje. Za dużo kombinujesz z tą wielojęzycznością. Jeżeli w ogóle to jest potrzebne to stawia się najprościej oddzielny serwis/stronę. A specyficzne przypadki jak międzynarodowe sklepy internetowe - stosują różne linki lub subdomeny w zależności od wersji językowej.
nowy_pehapowiec
Tego chciałem się dowiedzieć, czy da się dobrze taką stronę zaindeksować -jeśli nie to sprawa jest oczywista. Ale chyba dla domyślnego języka nie ma potrzeby tworzenia subdomeny?
strona.com - dla poslkiej strony
en.strona.com - dla angielskiej
fr.strona.com - dla francuskiej

pozdro
jareeny
według mnie, sprawdzać język przeglądarki można wtedy, kiedy się chce na wejściu ustawić domyślny język strony czyli:

język przeglądarki: polski, treść domyślna: polska
język przeglądarki: angielski - redirect na en.site.pl
język: chiński - redirect ch.site.pl

no a jeżeli domyślny język nie byłby polski no to

język przeglądarki: polski - redirect pl.site.com

obojętnie
Kużdo
Witam,

Trochę odgrzebię temat, ale mam problem ze zrozumieniem pewnej rzeczy... Były tutaj podawane sposoby zapisywania dynamicznych treści do bazy i jedną z nich była jedna tabela z kolumną lang, w której był określony język wpisu... Co w przypadku, gdy użytkownik wejdzie w taki wpis, zobaczy, że jest też jego polska wersja i będzie chciał się na nią przełączyć, bo np. zna jako tako polski, a może być tam więcej informacji? ID takich wpisów jest inny, a subdomeny nie wchodzą w grę...

Pozdrawiam.
vokiel
@kuzdo
Tu nie ma problemu. Masz np taka strukturę tabeli:
Kod
ID| ID_WPISU | TYTUL | TRESC | JEZYK |
1 | 1 | Tytuł PL | Treść PL | PL |
2 | 1 | Title EN |  Contents EN | EN |
3 | 1 | Название RU | Содержание RU | RU |

W takim wypadku możesz trzymać wpisy w trzech językach i łatwo między nimi przełączać. Ustawiasz taki sam ID_WPISU dla wszystkich trzech. Wyświetlając wpis pobierasz ID innych, dla których ID_WPISU jest taki sam, i generujesz linki do nich w stylu:
  1. <a href="wpis.php?id=2">zobacz wpis w en</a>
  2. <a href="wpis.php?id=3">zobacz wpis w ru</a>

eai
Dlaczego? PrimaryKey to może być para kluczy. ID i LANG.

Kod
ID| JEZYK | | TYTUL | TRESC |
1 | PL | Tytuł PL | Treść PL
1 | EN | Title EN |  Contents EN
1 | RU | Название RU | Содержание RU


PrimaryKey: (ID, JEZYK)
soomal
Rozważał ktoś na tych 8 stronach czy w wielu językach lepiej stosować nadmiarowe dane w tabelach czy normalizacje i podział na dwie tabele?
Chodzi mi o sytuację, gdy jakiś zasób ma cechy wspólne dla wielu wersji (np. grafika, przypisanie do kategorii, parametry systemowe) oraz różne (tytuł, opis, itd.).
Normalizacja w tym przypadku wydaje się mieć dużo wad: JOIN przy każdym zapytaniu, ograniczone stosowanie indeksów, jednak w cms firmy, w której pracuje tak właśnie sa zaimplementowane wersje językowe (!?)
Dyktus
Wiem, że ostatnia odpowiedź była w zeszłym roku, lecz nie chcę zaśmiecać forum.

Skorzystałem z opisanych tu sposobów tzn. mam plik załóżmy pl.php

Kod
$lg['mail_tytul']='Tytul maila';
$lg['mail_tresc']='Treść maila Witaj ...';
$lg['web_mail']='kontakt@kontakt.pl';


itd. oczywiście jest też plik en.php w którym są te informacje po angielsku.

Jak można zrobić coś takiego by np. w treści maila było

Cytat
Witaj [IMIE]. Oto dane do zalogowania:
Login: [LOGIN]
Hasło: takie jakie ustawiłeś przy zakładaniu konta


oczywiście korzystam z podstawowej funkcji mail()
Kod
mail($email, $lg['mail_tytul'], $lg['mail_tresc'], 'From: <'.$lg['web_mail'].'>');


W jaki sposób przyłączyć do $lg['mail_tresc'] w odpowiednich miejscach login i ewentualnie imię ?

Nakierujcie chociaż może dojdę do reszty sam. Szukałem oczywiście jednak nie znalazłem nic co by pasowało, lub też po prostu mogłem to przeoczyć.
nospor
str_replace()
dreaken
Do maili najlepiej zrobić sobie specjalny systemik który będzie obsługiwał do nich szablony, a w szablonie maila użyć systemu językowego to nie problem.
dstp
przekopałem cały temat, ale nie znalazłem odpowiedzi na swoje pytanie.. piszę prosty sklep internetowy i stanąłem przy wrzucania produktów z panelu administracyjnego. Mam kilka języków w sklepie i chciałbym, żeby do każdego produktu można było dodać opis i cenę w innym języku. Myślałem, żeby dodać kolumnę do tabeli "LANG", coś takiego:

id | cat | name | desc | price | LANG

i przy dodawaniu produktu wrzucać tyle rekordów ile jest języków, tylko w ostatniej kolumnie zmieniać LANG

chyba, że znacie jakieś lepsze rozwiązanie
Adi32
Witajcie.

Przekopałem się przez temat i kilka razy padła odpowiedź na moje pytanie ale może jednak coś się zmieniło gdyż temat dawno zamarł.

Stworzyłem w miarę uniwersalny sklep w którym admin (owner) ma możliwość dodawania dowolnej ilości języków, treści stałych jak i opisów produktów, newsów itp i jest to rozwiązane wydaje mi się w najlepszy możliwy sposób.

Ogólne teksty na stronie:

Tabela jezyk = id | nazwa | skrot
Tabela fraza = id_jezyk | fraza // id jezyk 0 to opis frazy w języku polskim

Dla produktów, kategorii i newsów jest

Tabela produkt id,nazwa i inne | id_jezyk

Użytkownik ma domyślny język w sesji.
Tabele związane z językiem są cachowane więc baza nie jęczy.

Dzięki temu wszystko dzieje się szybko. Admin ma możliwość zmieniać tłumaczenia przez CMS dla każdego języka i frazy.
Jeżeli chodzi o produkty to rozwiązania są 2:
1 - dla innego języka inny produkt
2 - produkt ten sam ale opis, nazwa, cena (waluta, vat) z tabeli łączonej

ale to już zależy od klienta, mam zrobione 2 opcje łatwo przełączalne.

Co o tym myślicie?
erix
A jak rozwiązujesz tłumaczenie treści z bazy? Tzn. produkty i opisy w innych językach.

Bo cache cachem, ale nieskończonej pojemności też nie ma.
Regz
Ostatnio napisałem na szybkości coś takiego co do samego wyboru języka, może komuś się przyda wink.gif

  1. $langs_array = ['pl', 'en', 'fr'];
  2. $default_lang = 'pl';
  3.  
  4. if(isset($_SESSION['SESSION_LANG'])):
  5. if(!in_array($_SESSION['SESSION_LANG'], $langs_array)):
  6. $_SESSION['SESSION_LANG'] = $default_lang;
  7. endif;
  8. else:
  9. $input = strtolower($_SERVER['HTTP_ACCEPT_LANGUAGE']);
  10.  
  11. $pattern = '/;q=([0-1]{0,1}.\d{0,4})/i';
  12.  
  13. $user_languages = [];
  14.  
  15. foreach(explode(',', $input) as $lang):
  16. $user_languages[] = preg_replace($pattern,'',$lang);
  17. endforeach;
  18.  
  19. unset($input, $pattern, $lang);
  20.  
  21. $selected_language = '';
  22.  
  23. foreach($user_languages as $lang):
  24. if(in_array($lang, $langs_array)):
  25. $selected_language = $lang;
  26. break;
  27. endif;
  28. endforeach;
  29.  
  30. if(empty($selected_language)):
  31. $_SESSION['SESSION_LANG'] = $default_lang;
  32. else:
  33. $_SESSION['SESSION_LANG'] = $selected_language;
  34. endif;
  35.  
  36. unset($user_languages, $selected_language);
  37. endif;
  38.  
  39. $lang = filter_input(INPUT_GET, 'lang');
  40.  
  41. if(!empty($lang)):
  42. if(in_array($lang, $langs_array)):
  43. $_SESSION['SESSION_LANG'] = $lang;
  44. else:
  45. $_SESSION['SESSION_LANG'] = $default_lang;
  46. endif;
  47. endif;
  48.  
  49. include $_SESSION['SESSION_LANG'] . '/index.php';
  50.  
  51. unset($lang);
  52.  
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.