This post comes from the first version of this blog.
Please send me an email if anything needs an update. Thanks!

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:

1
2
3
4
5
$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 :

1
2
3
4
5
$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 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.