PDA

Zobacz pełną wersję : Zmiana języka miesięcy i dni. Komponent kalendarza pbbooking.



noiragneau
12-12-2011, 09:30
dotyczy: http://komputerowe-pogotowie.pl/index.php/rezerwacja-terminu
Komponent PBBooking (kalendarz)

Nazwy miesiecy i dni są po angielsku, chciałbym aby były po polsku.
To co znalazłem w kodzie komponentu to komentarz:
//TODO: check how proper implementation of setLocale in Joomla is done....
Tylko gdzie ustawić setLocale w Joomla ?
Jedyne wystąpienie znalazłem w libraries/joomla/utilities/string.php - próbowałem tam coś zmieniać ale nic nie pomogło.

Proszę o pomoc bo już kombinuje na różne sposoby i nie mogę sobie z tym poradzić.

pyziak
12-12-2011, 09:41
te wyrażenia (Sunday...) znajdują się w pliku językowym /administrator/language/en-GB/en-GB.com_pbbooking.ini proponuje skopiować plik nazwać go pl-PL.com_pbbooking.ini umieścić go w /administrator/language/pl-PL/ no i oczywiście spolszczyć zawartość.

noiragneau
12-12-2011, 09:47
To juz kiedyś przerobiłem to ale niestety nie podziałało. Te wyrażenia rzeczywiście tam są ale odnoszą się jedynie do nazw w panelu admina

g_a_kowalski
19-12-2011, 17:01
Problem z wyświetlaniem polskich nazw miesięcy dotyczy tego, co zwraca PHP-owa funkcja strftime(), której wynik jest znowuż zależny od innej funkcji, którą jest setLocale. Ta także jest standardową funkcją PHP - nie jest to funkcja Joomli. SetLocale wskazuje ustawienia regionalne, które mają być użyte w danym skrypcie i wskazuje dla jakiego typu operacji lub danych. Jest to kłopotliwa funkcja ponieważ jest mocno zależna od systemu operacyjnego, na którym mamy uruchomioną instancję PHP.

Jeżeli PHP działa na Linuxie, wówczas sprawa jest prosta: na początku pliku php generującego widok (np. /com_pbbooking/views/pbbooking/tmpl/consolidated_view.php) musimy po prostu dopisać coś takiego:

setlocale(LC_TIME, "pl_PL");
Lub jeśli mamy problemy z kodowaniem:

setlocale(LC_TIME,"pl_PL.UTF-8");

Problemy pojawiają się, gdy PHP działa na systemie Windows, ponieważ system ten miewa bardzo różne oznaczenia dla języków i kodowań w zależności od swojej wersji. Istnieją jednakże odpowiednie strony internetowe w bazach MSDN (http://msdn.microsoft.com/en-us/library/39cwe7zf(v=VS.71).aspx oraz http://msdn.microsoft.com/en-us/library/cdax410z(vs.71).aspx), którymi można się posiłkować. To, co powinno działać już na każdym obecnym Windowsie to:

setlocale(LC_TIME, "polish" );

Jednakże, to nie koniec problemów, bo pozostaje jeszcze kodowanie. Niestety, wbrew zdrowemu rozsądkowi, system Windows nie obsługuje UTF-8 dla funkcji setLocale! Można to sprawdzić samemu albo zagłębić się w literaturę. Jedynym sposobem jest niestety wstawienie wszędzie gdzie trzeba odpowiednich wywołań funkcji iconv(). Dla przykładu - trzeba taki kod (wzięty z kodu do PBBooking):

echo '<th colspan='.(count($this->timeslots)-2).'>'.strftime('%B',$currday->format('U')).'</th>';
zamienić na taki:

echo '<th colspan='.(count($this->timeslots)-2).'>'.iconv('Windows-1250', 'UTF-8', strftime('%B',$currday->format('U'))).'</th>';

No i teraz już tylko od chęci programisty zależy jak elegancko zostaną wdrożone odpowiednie zmiany w kodzie.


dotyczy: http://komputerowe-pogotowie.pl/inde...rwacja-terminu
Pod wskazanym przez Ciebie linkiem mamy Consolidated View. Ja go u siebie (Windows + UTF-8) poprawiłem tak:


<?php //push stylesheet into head

setlocale(LC_TIME, 'polish');

$doc = &JFactory::getDocument();
$doc->addStyleSheet(JURI::root(false)."components/com_pbbooking/user_view.css");

//get first day of week
$arr = date_parse(date_format($date,DATE_RFC822));
$timestamp = mktime($arr['hour'],$arr['minute'],$arr['second'],$arr['month'],$arr['day'],$arr['year']);
$arr = getdate($timestamp);
$firstday = $date;
$firstday->modify('-'.$arr['wday'].' day');
$currday = clone $firstday;

$prevweek = clone $currday;
$prevweek->modify('-7 day');
$nextweek = clone $currday;
$nextweek->modify('+7 day');

//render week calendar view
echo '<table id="pbbooking">';
echo '<tr>';
echo '<td></td>';
echo sprintf("<th><a href=index.php?option=com_pbbooking&task=view&date=%s><<</a></td>",date_format($prevweek,'Ymd'));
echo '<th colspan='.(count($this->timeslots)-2).'>'.iconv('Windows-1250', 'UTF-8', strftime('%B',$currday->format('U'))).'</th>';
echo sprintf("<th><a href=index.php?option=com_pbbooking&task=view&date=%s>>></a></th>",date_format($nextweek,'Ymd'));

echo '</tr>';

echo '<tr><td></td>';
foreach ($this->timeslots as $timeslot) {
echo '<th>'.$timeslot['english'].'</th>';
}
echo '</tr>';
for($i=0;$i<7;$i++) {
echo '<tr>';

//TODO: check how proper implementation of setLocale in Joomla is done....
echo '<td>'.iconv('Windows-1250', 'UTF-8', strftime($this->config->date_format_heading,date_format($currday,'U'))).'</td>';
foreach ($this->timeslots as $timeslot) {
if ($this->block_same_day == 1) {
$currday->setTime(0,0);
} else {
$currday->setTime($timeslot['start_hour'],$timeslots['start_min']);
}
if ($this->now <= $currday) {
if (!$this->cal->isOpen($timeslot['id'],$currday)) {
echo '<td class="closed_cell">N/A';
}
else if (!$this->cal->isFree($currday,$timeslot['id'])) {
echo '<td class="free_cell">';
echo sprintf("<a href=index.php?option=com_pbbooking&task=create&date=%s&slot=%s>",date_format($currday,'Ymd'),$timeslot['id']);
echo JTEXT::_('COM_PBBOOKING_FREE_TEXT')."</a>";
} else {
echo '<td class="busy_cell">';
echo JText::_('COM_PBBOOKING_BUSY_TEXT');
}
echo '</td>';
} else {
echo '<td class="busy_cell">';
echo JText::_('COM_PBBOOKING_PAST_TEXT');
echo '</td>';
}

}
$currday->modify('+1 day');
echo '</tr>';
}
echo '</table>';

?>

noiragneau
19-12-2011, 19:27
Wiedziałem że to SetLocale trzeba ustawić ale nie wiedziałem jak.
Zgooglałem kiedyś i dopisałem linię:

setlocale(LC_TIME, 'pl_PL');

ale nie działało i straciłem kilka godzin na szukanie rozwiązania.
Po Twoim poście okazało się że miałem prosty błąd: 'pl_PL' zamiast "pl_PL" :/
Pojawił się problem z kodowaniem ale dodatek UTF-8 pomógł.
Dzięki wielkie.