X++:
static str translit(str value, boolean letteronly = false)
{
container rus = ['а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я'];
container lat = ['a','b','v','g','d','e','jo','zh','z','i','j','k','l','m','n','o','p','r','s','t','u','f','h','c','ch','sh','sch','','y','','e','ju','ja'];
int i, n;
str letter;
str ret;
;
for (i = 1;i<=strlen(value);i++)
{
letter = strlwr(substr(value,i,1));
n = confind(rus,letter);
ret += n>0 ? conpeek(lat,n) : letter;
}
return letteronly ? strkeep(ret,'abcdefghijklmnopqrstuvwxyz0123456789') : ret;
}