Myślę, że nie popełnię dużego błędu, jeśli powiem, że każdy, kto kiedykolwiek potrzebował tłumaczenia pewnych informacji z nieznanego języka na „swój”, na pewno trafił kiedyś na narzędzie Google Translate. Jest to bezsprzecznie jeden z najlepszych translatorów na rynku, także trudno się dziwić, że jest tak powszechnie wykorzystywany. Także my, twórcy stron internetowych często korzystamy z niego, ponieważ udostępnia bez większego problemu możliwość dynamicznego tłumaczenia tekstu na stronie. Czasem jednak jest to zachowanie niepożądane, a więc wypada wiedzieć, jak to zablokować. Zapraszam do lektury dzisiejszego wpisu.
Fotografia: brionv, CC-BY-SA.
Google Translate: Blokowanie tłumaczenia elementów na stronie internetowej.
Co prawda na niniejszym blogu jeszcze nie było żadnego artykułu o tym, jak rzeczoną stronę przetłumaczyć na żądany język, aczkolwiek wyjątkowo pozwolę sobie skupić się dzisiaj wyłącznie na samym blokowaniu tłumaczenia.
Pierwsza kwestia – kiedy tłumaczenie jest „zbędne”? Rozważmy następujący przypadek – wstawiam w treść wpisu fragment kodu, np taki:
$nazwa = 'trzy małe świnki';
for($numer = 0; $numer < 10; $numer++)
{
echo $nazwa.$numer."\n";
}
Co się stanie, jeśli przetłumaczę treść wpisu na angielski? Oczywiście treść artykułu zostanie zmieniona, to jest oczywiste i pożądane. Problem polega na tym, że kod, który napisałem, będzie teraz wyglądał następująco:
Oczywiście sytuacja, z jaką się faktycznie zmierzymy jest dokładnie odwrotna. Ze względu na to, że nasz kod będzie napisany po angielsku [a przynajmniej powinien być] zostanie przetłumaczony na język docelowy, będzie zupełnie nieczytelny. Jak można zobaczyć na obrazku, jest on także błędny – wstawione spacje między znakiem dolara a nazwą zmiennej na pewno nie pomogą interpreterowi PHP w wykonaniu tego kodu.
Jest to proces w pełni zautomatyzowany – mechanizm tłumaczący po prostu podmienia całą treść strony nie dając nad tym żadnej kontroli. Ogólnie rzecz biorąc, nie istnieje żaden sposób pozwalający aktywnie wpłynąć na jego działanie i zabronić edycji poszczególnych elementów.
Okazuje się jednak, że istnieje możliwość poinformowania tego mechanizmu o tym, żeby pominął cały element i nie zmieniał go. Aby to zrobić, należy do tego elementu dodać klasę „notranslate”. Tym razem kod zostanie opakowany w kontener <span class=”notranslate”></span>:
$nazwa = 'trzy małe świnki';
for($numer = 0; $numer < 10; $numer++)
{
echo $nazwa.$numer."\n";
}
Proste? Zobaczmy moje rozwiązanie sprawuje się w praktyce:
Od razu lepiej, prawda?
Co do samej wtyczki SyntaxHighlighter Evolved – to rozwiązanie nie jest idealne, ponieważ opakowanie całości kodu w element <span> spowoduje, że powstaną zbędne odstępy w pionie. Na szczęście w ustawieniach wtyczki mamy taką pozycję, jak „Additional CSS Classes”. Dodajmy tam wpis „notranslate” [bez cudzysłowów, oczywiście] i możemy cieszyć się już rozwiązaniem poprawnym, a do tego automatycznym. W tym momencie wiemy już, jak skutecznie obronić nasze „wrażliwe na tłumaczenie” fragmenty strony, także Google Translate już nam nie straszne. ;]
Dziękuję za uwagę i zapraszam do dyskusji w komentarzach.
Warto przeczytać.
Trwa ładowanie…

Jak zawsze krótko i na temat ;) Czytam Twojego bloga od dawna i jestem naprawdę pełen podziwu jeśli chodzi o jego poziom, a także częstotliwość wpisów.
Pozdrawiam.
[micro] Iron 1.2.1 i trochę informacji o nim
Dobrze wiedzieć, ze istnieje taka opcja. Aczkolwiek, mam jedną uwagę – uważam, że wybrałeś zły przykład, nakłaniający do złych praktyk. O co chodzi? O język. Językiem developera jest/powinien być angielski. I nie mówię, o zawartości zmiennych, tylko o samym ich nazewnictwie.
Darmowa płyta miesiąca: czerwiec 2011 – mindthings: Life’s Path
Zgadzam się z singlesem. Zastanawiałem się przez chwilę, czy to zdanie: „nasz kod będzie napisany po angielsku [a przynajmniej powinien być]” nie tłumaczy użycia polskich zmiennych, ale ja go nie rozumiem :)
uolot: RT @smashingmag: ActiveAdmin: an administration framework for business critical Ruby on Rails applications – http://activeadmin.info
Miło mi to słyszeć, dziękuję. Mam pomysły na kolejne serie wpisów, czyli kolejne „dni”, aczkolwiek muszę sprawdzić, czy dam radę zwiększyć częstotliwość publikacji bez istotnego uszczerbku na zdrowiu i innych obowiązkach. W każdym razie „stay tuned” – postaram się nie zawieść wiernych Czytelników. ;]
Google Translate: Blokowanie tłumaczenia elementów na stronie internetowej.
Faktycznie trochę zamotałem, aczkolwiek wydawało mi się, że jeśli napiszę odpowiednie wyjaśnienie, to wszystko będzie ok. Fragment jednego z akapitów: „Oczywiście sytuacja, z jaką się faktycznie zmierzymy jest dokładnie odwrotna. Ze względu na to, że nasz kod będzie napisany po angielsku”.
Po prostu miałem cały wpis po Polsku, więc Google Translate dawało mi opcje tłumaczenia strony na język „inny niż polski”, stąd wymuszenie przykładowego kodu po polsku.
Tutaj właściwie wypada wspomnieć to samo co w odpowiedzi na komentarz Radka: „Oczywiście sytuacja, z jaką się faktycznie zmierzymy jest dokładnie odwrotna. Ze względu na to, że nasz kod będzie napisany po angielsku” – musiałem przetłumaczyć zawartość strony [wtyczką Google AJAX Translate, którą włączyłem na chwilę do testów wpisu] i dlatego musiałem napisać wszystko po polsku, żeby zademonstrować zmianę w jednym przypadku i brak zmiany w drugim.
Jeśli to aż tak kłuje w oczy, to zrobię przykład ze zwykłym tekstem, w końcu programiści i tak zrozumieją o co chodzi. ;]
Google Translate: Blokowanie tłumaczenia elementów na stronie internetowej.
A bo w sumie to mi się udzieliło maruderstwo kolegi ;) Nie ma się co czepiać o szczegóły, a treść wpisu (jak zawsze) ciekawa :)
uolot: RT @php: The amazing pen-spinning, phone-catching, rope-tying robotic hand: I think I’ve featured this robot on the … http://bit.ly/jf …
Cieszę się, że udało nam się dogadać. Ja wiem, że jeśli jesteśmy dokładni we wszystkich kwestiach, to Radek ma rację. Wychodzę jednak z założenia, że Ci, którym zależy, przeczytają cały wpis, a nie tylko przejrzą na szybko kawałki kodu. Jak komuś nie zależy, to żeby mu w <h1> wstawić główne informacje, to nic nie da. ;]
Google Translate: Blokowanie tłumaczenia elementów na stronie internetowej.
Trafiłem na tego bloga przypadkiem ale po przeczytaniu kilku wpisów wiem ze zagoszce tu na dłużej:]