На спане есть модуль Lingua::Identify, который предназначен для определения языка, на котором написан текст.
Я опробовал его с данными из базы сайта sayperl.org, сравнивая результат с тем, что определил переводчик Гугла.
use v5.12;
use SayPerl::Datasource;
use Lingua::Identify qw(:language_identification);
my ($total, $equal);
for (@{dbh->selectall_arrayref("
select title, description, language
from item where language
in ('bg', 'da', 'de', 'en', 'es', 'fi', 'fr',
'hr', 'hu', 'id', 'it', 'la', 'nl', 'pl', 'pt',
'ro', 'ru', 'sl', 'sq', 'sv', 'tr')")}) {
$total++;
my $text = "$$_[0] $$_[1]";
$text =~ s{<.*?>}{ }gs;
my $detected = langof($text);
my $googled = $$_[2];
if ($detected ne $googled) {
say "$detected $googled $$_[0]";
$equal++;
}
}
say "$equal/$total";
Из таблицы выбирались записи только на языках, которые поддержвает модуль, а для определения я воспользовался самым простым вариантом — вызовом функции langof(), которая в скалярном контексте возвращает код языка.
Результат — из 5063 записей язык не совпал в 1590 случаях. Прям увы. Русские записи не определились в подавляющем большинстве случаев: 1401 из 1492 (может надо было где-то включить юникод?).
В тестах к модулю лежат всего четыре файла с текстами: de, en, pt и pt_big. В немецком — ни одного умляута, а португальские — в однобайтовой Latin-1. Перекодировка Encode::from_to из UTF-8 в CP1251 вдвое уменьшила число ошибок в русских текстах, но это уже шаманство.
Гугл ошибается, в основном, только на предельно коротких текстах. Полный лог доступен для самостоятельного изучения.

