PDA

Zobacz pełną wersję : Wersje językowe



nexus246
08-11-2005, 20:52
Rozwiązanie wykorzystałem na niewielkiej stronie (docelowo szacuję około 20-30 pozycji w menu) z braku gotowca :P i z niechęci do walk z mambelfiszem który podobno nie działa z Joomlą.

Na początku templatki piszemy


session_start();
//kody języków
$languages = array("pl","de","en");
//zmienna lang jest ustawiona i odpowiada jednemu z kodów
if(!empty($_GET['lang']) && in_array($_GET['lang'],$languages))
{
$_SESSION['lang'] = $_GET['lang'];
}
//ustawienie domyślne za pierwszym razem
elseif(empty($_SESSION['lang']))
{
$_SESSION['lang']="pl";
}


Do pozycji modułów dodajemy odpowiedni kod języka, czyli dla left wychodzi left_pl,left_en,left_de (3 języki zgodnie z powyższym przykładem)

Moduły ładujemy tak:

mosLoadModules('left_'.$_SESSION['lang']);

Dla każdego języka tworzymy wg uznania sekcje, kategorie, artykuły, menu.
Po stworzeniu menu sprawdzamy jaki jest link w serwisie to "strony głównej" wybranego języka i umieszczamy odpowiedni kod w templatce.

Tak to wyglądało w moim przypadku:


<img src="<?php echo $mosConfig_live_site; ?>/templates/mcg/images/lang-<?php echo $_SESSION['lang'];?>.gif"
align="right" usemap="#lang" border="0" />

<map name="lang">
<?php
switch($_SESSION['lang'])
{
case "pl" :
echo '<area shape="rect" coords="2,4,22,18" href="'.$mosConfig_live_site.'/index.php?option=com_content&amp;task=blogcategory&amp;id= 27&amp;lang=de" target="_self">';
echo '<area shape="rect" coords="23,4,44,18" href="'.$mosConfig_live_site.'/index.php?option=com_content&amp;task=blogcategory&amp;id= 28&amp;lang=en" target="_self">';
break;
case "de" :
echo '<area shape="rect" coords="2,4,22,18" href="'.$mosConfig_live_site.'/index.php?lang=pl" target="_self">';
echo '<area shape="rect" coords="23,4,44,18" href="'.$mosConfig_live_site.'/index.php?option=com_content&amp;task=blogcategory&amp;id= 28&amp;lang=en" target="_self">';
break;
case "en" :
echo '<area shape="rect" coords="2,4,22,18" href="'.$mosConfig_live_site.'/index.php?option=com_content&amp;task=blogcategory&amp;id= 27&amp;lang=de" target="_self">';
echo '<area shape="rect" coords="23,4,44,18" href="'.$mosConfig_live_site.'/index.php?lang=pl" target="_self">';
break;
}
?>
</map>

Jak widać zależnie od ustawienia zm.sesyjnej lang ładuje się odpowiedni obrazek do którego podpięta jest mapa z likami do pozostałych języków. Język polski jest domyślny więc linkuje do index.php, natomiast angielski i niemiecki do konkretnych podstron.

Język da się zmienić tylko poprzez przekazanie w linku zmiennej lang.

Aha:wady :D
Konieczność powielania komponentów - np.mam dla każdego języka inny komponent LxMenu.
Za zaletę uważam możliwość zrobienia całkowicie innego pod względem zawartości serwisu dla różnych języków.

Joomla User
08-11-2005, 21:28
A kodowanie? Przy UTF-8 nie byłoby problemów, ale najnowsza wersja Joomli jest w ISO-2. Czy nie będzie to przeszkadzało w uzyskaniu niemieckich umlautów?

nexus246
08-11-2005, 22:53
Racja, nie pomyślałem o tym.....
Generalnie kodowanie albo mozna ustawic w templatce albo sie pobiera z pliku jezykowego więc w tym przypadku chyba bezpieczniej byłoby ustawić wszędzie na UTF8.

Joomla User
08-11-2005, 23:10
A tak wogóle to nie prościej byłoby w trzech podkatalogach zainstalować trzy instancje Joomli? Adres byłby wtedy www.mojadomena.pl/pl/ (http://www.mojadomena.pl/pl/) bądź .../de/ albo też .../en/ ? No chyba że chcesz się pobawić... ;-)

nexus246
09-11-2005, 09:51
Takie rozwiązanie też stosowałem, faktycznie jest prostsze jeśli chodzi o instalacje ale.... Masz wtedy 3 panele administracyjne i p.Krysia się gubi :) a tak ma wszystko w jednym panelu :)

Ja też wolę w jednym, torchę nakładu pracy na początku a potem jest wygodnie.

macieeek
30-11-2005, 17:46
Do pozycji modułów dodajemy odpowiedni kod języka, czyli dla left wychodzi left_pl,left_en,left_de (3 języki zgodnie z powyższym przykładem)

Jak to zrobić? Jak dodać nowe pozycje modułów w Joomla 1.0.4 ???

nexus246
30-11-2005, 21:17
W panelu adm. Site->Template Manager->Module Positions

kotos
12-12-2005, 15:38
A mozesz gdzies pokazac jak to dzial w praktyce

nexus246
13-12-2005, 00:20
spoks, jak w koncu skoncze ta strone to wrzuce adres.... o ile w miedzyczasie nie pojawi sie jakis stable komponent ;)

magic
13-12-2005, 17:18
Ostatnia wersja MambelFish'a jest dość stabilna. Jedyny problem to parę niezgodności z Joomla.
Z tego co wiem, to zostały one pokonane przez zainteresowanych - poprzez drobne poprawki do plików core Joomla. Te poprawki są opublikowane. Zainteresowanym polecam wątki tutaj: http://forum.joomla.org/index.php/board,123.0.html

nexus246
13-12-2005, 22:16
Uzyles gdzies? Nie moge sie doczekac na jakas wersje stable komponentu.

magic
14-12-2005, 12:48
Jeszcze nie użyłeś ...
Też stoję pod ścianą, bo powinienem na jednej stronce zrobić dodatkowe wersje językowe. Teraz.
Zapowiedzi były, że JoomFish ma pojawić się razem z Joomla 1.1 - czyli w grudniu, ale sądząc po aktywności na forge i na nieco wymijających odpowiedziach Alex'a - coś cienko widzę zarówno grudzień jak i styczeń ...
Dlatego zrobiłem mały research na necie :D

enjoy777
23-12-2005, 00:14
czyli w grudniu, ale sądząc po aktywności na forge i na nieco wymijających odpowiedziach Alex'a - coś cienko widzę zarówno grudzień jak i styczeń ...

Jak pokazuje roadmap wersja 1.1 I kwartal 2006 czyli kolo marca :D
chyba powinienes sie przyjrzec tym hackom do mambelfisha

nexus246
23-12-2005, 10:59
Skoro kolo marca to pewnie po wakacjach ;)

rkubera
19-01-2006, 16:21
Użyłem Mambelfisha na swojej stronie joomla i nawet działa (po przeróbkach ;-)).
MambelFish w ogólnym założeniu polega na tym, że podmienia standardowe funkcje bazodanowe:
LoadObject();
LoadObjectList();
i LoadResult();
na własne. Problem w tym, że funkcja LoadResult dzała nieprawiłowo - tzn. zwraca wyniki, ale nie zwraca tłumaczenia. Dzieje się to dlatego, że dla funkcji loadResult nie ma tzw. Refference_ID, wg którego Mambelfish szuka tłumaczenia. I tu jest błąd w założeniu, nie wiem czy uda się to chłopakom obejść (przynajmniej nie w tej strukturze).

Jedynyn obejściem tego problemu jest odnalezienie w komponencie kawałka kodu odpowiedzialnego za pobieranie tej zmiennej przy pomocy LoadResult i zamianie go (przykład):

$database->setQuery("SELECT name from #__menus where id='$id'");
$result = $database->loadResult();

na kod:
$database->setQuery("SELECT id, name from #__menus where id='$id'");
$database->loadObject($temp);
$result = $temp->name;

W tym drugim przypadku w wyniku zwracane jest id, dzięki któremu Mambelfish będzie w stanie znaleźć sobie tłumaczenie.

Drugą sprawą jest to, że MambelFish nieprawidłowo działa z niektórymi wersjami PHP.
Problem leży ze zwracaniem parametrów z funkcji, najpierw wynik powinien być przypisany do zmiennej a potem zwrócony. W Mambelfish funkcja czasami zwraca jako wynik działanie innej funkcji co nie jest zgodne ze specyfikacją PHP w wersjach wyższych. Dzięki temu na moim PC działał, a na serwerze Providera nie ;-)
Pozdrawiam.

Radek.

stone
19-01-2006, 17:31
Mialem kiedy blad bodajze na php 4.1.11 (czy jakos tak :))
Rozwiaznie znalazlem tu http://mamboforge.net/forum/forum.php?thread_id=11845&forum_id=7

rkubera
19-01-2006, 17:39
Mialem kiedy blad bodajze na php 4.1.11 (czy jakos tak :))
Rozwiaznie znalazlem tu http://mamboforge.net/forum/forum.php?thread_id=11845&forum_id=7 Dokładnie, chodzi o te '&' przy funkcjach. To drugi sposób "objeścia" problemu. Gdy ich nie ma, funkcja nie zwraca wyniku do funkcji wywołującej.
Pozdrawiam.

magic
19-01-2006, 19:45
Jest dostępna wesja mambelfish przygotowana (zhack'owana) dla Joomla! 1.0.7 tutaj (http://forum.joomla.org/index.php/topic,26271.0.html), oraz dla 1.0.5 (po polsku) tutaj (http://www.joomlasite.net/component/option,com_remository/Itemid,43/func,fileinfo/id,80/).
Działa.