Как стать автором
Поиск
Написать публикацию
Обновить

Быстрый перевод больших списков на примере регионов мира

Время на прочтение2 мин
Количество просмотров6.3K
Понадобилось мне перевести список регионов мира на русский. Подобные списки с ISO-кодами встроены во многие CMS и интернет-магазины, и их перевод вручную — занятие зело неблагодарное. На русском я ничего подобного не нашел, да это не сильно помогло бы, поскольку нужно сопоставить названия на английском с названиями на русском. В итоге родилась простенькая идея быстрого перевода подобных списков, которой я хочу поделиться — вдруг кому-то тоже пригодится.

Я переводил список регионов для OpenCart, используя Википедию и простейший скрипт:

$db = mysql_connect('localhost', 'username', 'password');
mysql_select_db('database', $db);
mysql_set_charset('utf8', $db);

$result = mysql_query("SELECT zone_id, name FROM zone GROUP BY zone_id ASC"); // Берем список из базы.

while ($row = mysql_fetch_assoc($result))
{
	$page = @file_get_contents('http://en.wikipedia.org/wiki/'.str_replace(" ", "_", $row['name'])); // Запрашиваем страницу на английском.
	preg_match("/<a href=\"\/\/ru\.wikipedia\.org\/wiki\/(.*)\" title/", $page, $matches); // Ищем в коде полученной страницы ссылку на русский вариант.

	if (!empty($matches))
	{
		mysql_query("UPDATE zone SET name = '".$row['name']."::".urldecode(str_replace("_", " ", $matches[1]))."' WHERE zone_id = '".$row['zone_id']."'"); // Если нашлось, пишем в базу вот так.
	}
	else
	{
		mysql_query("UPDATE zone SET name = '".$row['name']."' WHERE zone_id = '".$row['zone_id']."'"); // Если не нашлось, пишем этак.
	}
}

Скрипт просто запрашивает Википедию, подставляя в ссылку английское название, парсит страницу на предмет наличия ссылки на русский вариант и из нее же забирает перевод. Фокус в том, что у Википедии почти все ссылки содержат то же самое название, что и в тексте. Даже вот такой ужас.

Нюансы:


  • Где-то треть списка осталась непереведенной, но это сильно зависит от того, насколько совпадают английские названия с теми, что указаны в Википедии.
  • Переведенный список придется немного почистить руками. Например, в моем случае нужно было убрать названия стран в скобках или всякие там "(значения)", "(город)", "(провинция)" и т. п.
  • Википедия заменяет пробелы на подчеркивания, поэтому нужно туда-сюда их переводить (есть в скрипте). Но я не уверен, что не происходит еще каких-то других замен — стоит этот момент учитывать.
  • Капитан напоминает, что чем больше список, тем дольше он будет обрабатываться. Например, у меня был список из 4000+ зон, и я его запускал через браузер, ограничивая запрос по 1000 строк. Но лучше в таких случаях запускать НЕ через браузер.

Еще раз уточню, что это лишь пример. Теоретически подобное решение можно использовать для перевода любых списков через Википедию с любого языка на любой. Возможно, у данной задачи есть и другие варианты поиска и парсинга полученных данных, но ничего проще я не придумал.
Теги:
Хабы:
Всего голосов 16: ↑6 и ↓10-4
Комментарии32

Публикации

Ближайшие события