Wikidata:Форум/Архив/2024/01
This page is an archive. Please do not modify it. Use the current page, even to continue an old discussion. |
Транслитерация кириллицы в латиницу
Часто бывает нужно перевести имя собственное из кириллицы в латиницу, чтобы добавить название элемента и на английском языке. Например: "Фёдор Михайлович Достоевский" > "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
}
}