Wikidata:Форум/Архив/2024/01

From Wikidata
Jump to navigation Jump to search

Транслитерация кириллицы в латиницу

Часто бывает нужно перевести имя собственное из кириллицы в латиницу, чтобы добавить название элемента и на английском языке. Например: "Фёдор Михайлович Достоевский" > "Fedor Mikhaylovich Dostoyevskiy". Я долго не мог найти способ, как это делать в командной строке. Можно это делать либо на многочисленных сайтах с веб-интерфейсом, либо устанавливать специальную программу, а если есть Powershell - можно использовать функцию ниже. Она испоользует сервис ICU. Лучшего места поделиться я не нашёл. Если есть способы лучше - пишите.

<#
.EXAMPLE
Convert-CyrillicToLatin -StringOrig 'Гоголь, "Николай" \Васильевич'
Gogolʹ, "Nikolay" \Vasilʹyevich
#>
function Convert-CyrillicToLatin ($StringOrig) {
	$stringEncoded = [System.Web.HttpUtility]::UrlEncode($stringOrig.Replace('ё','е').Replace('Ё','Е'))
	$body = "TEMPLATE_FILE=data%2Ftranslit_nub.html&OPCODE=TRANSLITERATE&OPARG1=$StringEncoded&OPARG2=Hex-Any%3Bru-ru_Latn%2FBGN&OPARG3=undefined&CALLBACK=callbackHandleTransliterateButton&CONTEXT=1"
	$url = 'https://icu4c-demos.unicode.org/icu-bin/translit'
	$resp = Invoke-WebRequest -Method Post $url -Body $body -ContentType "application/x-www-form-urlencoded"
	if (($resp.Content) -match 'OPRESULT.*?value="(.*?)">\r?\n') { 
		return [System.Web.HttpUtility]::UrlDecode($matches[1])
	}
	else { 
		Write-Debug "Failed to convert $StringOrig, got this from server: $($resp.Content)"
		return $null 
	}
}

Podbrushkin (talk) 08:04, 23 January 2024 (UTC)