Többnyelvű weboldal, aldomainnal

Többnyelvű weboldal, aldomainnal
2018-06-01T18:47:39+02:00
2018-06-06T18:02:31+02:00
2022-10-15T21:36:12+02:00
Molesz1986
Sziasztok.

Hogyan tudnám megoldani azt, hogy pl az angol nyelvű oldal a gb.oldal.hu oldalon jelenjen meg? Odáig eljutottam, hogy a böngésző nyelvét beraktam egy változóba és itt meg is állt a tudomány. Minden segítségnek örülnék.
Mutasd a teljes hozzászólást!
:OFF:
Gyerekek! Mi van veletek? Egy egyszerű htaccess redirect-et nem tudtok elmagyarázni?
:ON:

Első találat a Google-ben

Kielemezve soronként:

RewriteEngine on # átirányítás bekapcsolása RewriteCond %{HTTP_HOST} !^(www)\. [NC] # Minden olyan domain esetében, ahol a subdomain NEM www RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.com [NC] # Darabolja fel a kapott domaint subdomain-re és fődomain-re RewriteRule (.*) http://www.%2.com/?name=%1 [R=301,L] # hozza létre a tényleges url-t, és az apache már e szerint fogja betölteni az oldalt # a fájlban a $_GET['name'] néven érhető el az érték
rewrites http://subdomain.domain.com to http://www.domain.com/?name=subdomain

Átalakítva a te igényednek:

RewriteEngine on # átirányítás bekapcsolása RewriteCond %{HTTP_HOST} ^(hu|en|gb)\.([^?]*)[?]?(.*)$ [NC] # Darabolja fel a kapott domaint subdomain-re (elérhető nyelvek felsorolása), fődomain-re és az url további részére RewriteRule (.*) http://www.%2?lang=%1&%3 [L,NC] # hozza létre a tényleges url-t, és az apache már e szerint fogja betölteni az oldalt # a fájlban a $_GET['lang'] néven érhető el az érték
Egy példa:
phpinfo() -> http://www.valami.hu/index.php?lang=gb&itemid=3

Vagyis, ha az előbbit beírod a böngészőbe, és entert nyomsz, az utóbbit fogja feldolgozni az apache, míg a felhasználó böngészőjében az előbbi látható.

Ps.: Az utolsó hozzászólásodhoz a válasz:
Az alábbi feltételek valamelyike nem teljesül...

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

Így az átirányítás se hajtódik végre... és persze olyan helyre mutatsz, ahová nem kéne, ezért a Forbidden.
Mutasd a teljes hozzászólást!

  • Mielőtt tovább lépsz, olvasd el ezt az oldalt.
    Mutasd a teljes hozzászólást!
  • Köszi. Akkor marad a mappa. De ezt hogy tudom megoldani ?
    Mutasd a teljes hozzászólást!
  • Esetleg javasolnám pl. a gettext-el történő próbálkozást...
    Megj: Ha van kedved töltsd le a forrást és tanulmányozd...
    Mutasd a teljes hozzászólást!
  • Egyenlőre úgy allok, hogy a főoldalam az index.php?id=index. A nyelvet session-ban tárolom. Ha valaki kattint egyet az index.php?id=index&lang=ro linkre, akkor román lesz az oldal. De ez így nem túl szép és azt sem tudom jó-e.
    Mutasd a teljes hozzászólást!
  • Akkor egy másik érdekes példa, melynél csak egy *.html fájl van és egy kis JS-rásegítés...
    Megj: Menttsd le az egész oldalt és tanulmányozd a forráskódját...
    Mutasd a teljes hozzászólást!
  • Igy kellene nekem, hogy oldalnev.hu/en/ legyen az angol. Tehát minden maradjon úgy ahogy eddig csak külön mappa név legyen.
    Mutasd a teljes hozzászólást!
  • Ha jól értem mindegyik nyelvi fájl neve index.php.
    Akkor a könyvtárszerkezet:
    oldalnev.hu/index.php
    oldalnev.hu/en/index.php
    oldalnev.hu/de/index.php
    A nyelvi A-elemek href-jét meg találd ki...
    Megj: (lehet szöveg helyett az A-elem két tagja között egy IMG elem is)...
    Mutasd a teljes hozzászólást!
  • Minden nyelv külön fájlban van és az adatbázisban is külön oszlopokban. Az oldal felépítése mindenhol ugyanaz. Arra lenne szükség hogy a nyelv váltása utan legyen a domainban valami jele hogy masik nyelv van aktiválva. És itt nem a lang=en-re gondolok hanem az oldalneve.hu/en/
    Mutasd a teljes hozzászólást!
  • Akkor érthetőbben:

    // a gyökér könyvtár és azaz a domain név lesz a következők előtt majd a böngészőben /index.php // magyar nyelvü /galeria.php // magyar nyelvü /linkek.php // magyar nyelvü /en //angol nyelvű fájlok könyvtára /en/index.php // angol nyelvü /en/gallery,php // angol nyelvü /en/links.php // angol nyelvü
    Viszont figyelni kell két dologra:
    1. A menüben a megfelelő nyelvü szöveg mellett a relatív útvonalra és a fájlnevekre (az index.php-t nem kell kiírni a href-ben)
    2. A nyelv-váltó linkeknél szintén és mindig a megfelelő nyelven írod ki a szöveget, ha nem ikon-képet használsz.
    Pl a nyitó oldalnál:
    ha magyar, akkor domain-name/
    ha angol, akkor domain-name/en/
    Pl a galériánál:
    ha magyar, akkor domain-name/galeria.php
    ha angol, akkor domain-name/en/gallery.php

    Megj: Ennél világosabban nem tudom leírni...
    Mutasd a teljes hozzászólást!
  • Szerintem mi nagyon elbeszélünk egymás mellett.

    Leírtad azt, amit kérdeztem. Az oldal így néz ki:

    oldal.hu/index.php
    aztán megnéze egy tartalmat: oldal.hu/index.php?id=valami

    Ha átváltok pl angol nyelvre, akkor az oldal.hu/index.php?lang=en
    ez elmenti a munkamenetbe, hogy angol az oldal és itt véget is ért a mutatvány. Eze után az oldal.hu/index.php?id=valami angol nyelvű lesz.
    Csakhogy én másképp szeretném.
    ha átváltok angol nyelvre, akkor az oldal.hu/en/index.php?id=valaminek kellene megnyílnia és minden más oldalnál így is kellene kinéznie. Ez nem egy statukus oldal, ahol létrehozok egy EN mappát aztán mindent átmásolok oda is. Itt valószínűleg valami .htaccess meló lesz, de nem tudom.
    Mutasd a teljes hozzászólást!
  • Nem értettem félre, hogy most mit csinálsz és szeretnél kétnyelvűsíteni, csak a GET-es, SESSION-os megoldásról szerettek volna lebeszélni, melyért elnézést...
    Búcsuzóul egy lehetőség-bemutató (az utolsó fülön van a htaccesses) és a demo-ja...
    További Jó Munkát!
    Mutasd a teljes hozzászólást!
  • if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && !empty($_SERVER["HTTP_ACCEPT_LANGUAGE"])) { $http_accept_language = strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]); } else { $http_accept_language = "en"; }; $pattern_http_accept_language = "/^[a-z]+(?:-[a-z]+)?/i"; if (preg_match($pattern_http_accept_language, $http_accept_language, $matches)) { $http_accept_language = $matches[0]; }; if(strlen($http_accept_language) !== 3 && $http_accept_language !== "fr-ca" && $http_accept_language !== "pt-pt" && $http_accept_language !== "pt-br" && $http_accept_language !== "zh-tw") { $http_accept_language_code = substr($http_accept_language,0,2); } else if($http_accept_language === "fr-ca" || $http_accept_language === "pt-pt" || $http_accept_language === "pt-br" || $http_accept_language === "zh-tw") { $http_accept_language_code = $http_accept_language; }; echo $http_accept_language_code;

    A fentieket ezer éve csináltam php-vel. Jelenleg a kliensen a javascript-el oldom meg. 
    Ha nincs HTTP_ACCEPT_LANGUAGE, akkor default az en

    Neked a $http_accept_language_code -ra van szükséged és ha pl. hu akkor php-vel csinálsz redirect-et a domain.com/hu/oldal.php - re. A fenti dolog az két karaktert ad meg, kivétel a fr-ca (kanadai francia), pt-pt (portugál), pt-br (brazil portugal) és a zh-tw
    Mutasd a teljes hozzászólást!
  • Ezt általába "routing"-al szokták megoldani.
    Magyarul van egy .htaccess fájlod ami mindent az index.php-re irányít a route meg kinyeri a szükséges url szegmenseket és továbbítja a megfelelő controllernek.
    Egy alap leírást itt találsz róla.
    Mutasd a teljes hozzászólást!
  • Hali,

    egy több nyelvű oldalhz minek kell al-domain?

    1000 + 1 megoldás van.
    __nameDict__ = { "de" : {Pikes: "Pik", Hearst: "Herz", Tiles: "Karo", Clovers: "Kreuz"}, "en" : {Pikes: "Pikes", Hearst: "Hearts", Tiles:"Tiles", Clovers: "Clovers"} } def getLang(self): return self.__nameDict__.keys()[:] def setLang(self, lang): if lang in self.__nameDict__: self.__lang__ = lang
    Nem csak python ban --- PHP ban is. Én általában a session - template + dict megoldást használtam. Már csak azért nem használtam aldomaint, mert lusta voltam sokat írni És nem volt korlátlan tárhelyem :)


    Egyébként a gettext-es megoldás sem rossz. Csak válassz hozzá ügyes template kezelőt. (A symhony minden, csak nem az)
    Mutasd a teljes hozzászólást!
  • Amit szerettem volna, azt félig megoldottam. Csináltam egy htaccess fájlt az alábbi tartalommal:

    RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([en|es|pl|de|hu|ro]{2})/(.*)$ $2?lang=$1&%{QUERY_STRING} [L,QSA]
    Nagyon jól működik, már csak egy bibi van.
    Ha megnyitom az oldalt úgy, hogy domain.hu/ro/ akkor nem történik semmi. Azaz 

    Forbidden

    You don't have permission to access /ro/ on this server.


    Ha viszont az index.php be van írva mögé, akkor egyből jó? Mi lehet rá a megoldás?
    Mutasd a teljes hozzászólást!
  • 1; megoldás: DirectoryIndex elso.html index.htm index.html index.php
    2; megoldás: ne komplikáljuk :)
    Mutasd a teljes hozzászólást!
  • :OFF:
    Gyerekek! Mi van veletek? Egy egyszerű htaccess redirect-et nem tudtok elmagyarázni?
    :ON:

    Első találat a Google-ben

    Kielemezve soronként:

    RewriteEngine on # átirányítás bekapcsolása RewriteCond %{HTTP_HOST} !^(www)\. [NC] # Minden olyan domain esetében, ahol a subdomain NEM www RewriteCond %{HTTP_HOST} ^(.*)\.(.*)\.com [NC] # Darabolja fel a kapott domaint subdomain-re és fődomain-re RewriteRule (.*) http://www.%2.com/?name=%1 [R=301,L] # hozza létre a tényleges url-t, és az apache már e szerint fogja betölteni az oldalt # a fájlban a $_GET['name'] néven érhető el az érték
    rewrites http://subdomain.domain.com to http://www.domain.com/?name=subdomain

    Átalakítva a te igényednek:

    RewriteEngine on # átirányítás bekapcsolása RewriteCond %{HTTP_HOST} ^(hu|en|gb)\.([^?]*)[?]?(.*)$ [NC] # Darabolja fel a kapott domaint subdomain-re (elérhető nyelvek felsorolása), fődomain-re és az url további részére RewriteRule (.*) http://www.%2?lang=%1&%3 [L,NC] # hozza létre a tényleges url-t, és az apache már e szerint fogja betölteni az oldalt # a fájlban a $_GET['lang'] néven érhető el az érték
    Egy példa:
    phpinfo() -> http://www.valami.hu/index.php?lang=gb&itemid=3

    Vagyis, ha az előbbit beírod a böngészőbe, és entert nyomsz, az utóbbit fogja feldolgozni az apache, míg a felhasználó böngészőjében az előbbi látható.

    Ps.: Az utolsó hozzászólásodhoz a válasz:
    Az alábbi feltételek valamelyike nem teljesül...

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d

    Így az átirányítás se hajtódik végre... és persze olyan helyre mutatsz, ahová nem kéne, ezért a Forbidden.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd