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 :

$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.