taking joy in human unreason

Buying Russian Train Tickets: A Tale of Language and Gaming


Get from Moscow to Saint Petersburg on a particular day, starting at a particular time, and on a particular train.


I don’t read Russian! Nor do I have a grasp on the phonetics of the alphabet, although I can now successfully remember/guess the sounds of some letters and thus near-cognates (e.g., “ДOKУMEHTA” is probably something about a document, although Google Translate throws up its hands).

Things in My Favor

  1. I’m using Google Chrome, which seamlessly lets me toggle back and forth between the original Russian and translated English.
  2. I have a precise train number, car number, and set of seat options to book. (Hoo, boy, if this had been willy-nilly…)
  3. I understand limitations of common web development, regardless of the languages involved.
  4. I have a deep love of this sort of puzzle. Screw Braid–give me a game where I solve language puzzles to progress.

(As a warning, this tale turned out to be more technical than I anticipated, and decently long. Enjoy.)

The (Long) Tale

It started with utter rejection.

X’s rejection, that is. РЖД simply would not accept her credit card. We decided to try my MasterCard, just in case it wasn’t a blanket hate of American cards.

And the fun began.

Here is the untranslated RZD/РЖД homepage:

Untranslated РЖД Homepage

Easy enough to figure out, if you’ve been to travel sites. Enter origin, destination, European-style date, click the button that never looks enabled (>_<). Here's the translated relevant sidebar: РЖД Translated Homepage Sidebar

See those placeholders for “origin” and “destination” (or “from” and “to”, or whatever)? They didn’t translate. Also, take a look at what the date picker does:

РЖД Translated Date Picker

Any developers reading this are probably nodding their heads sagely, imagining string equality checks failing for the token replacements.

That said, big ups to Google Chrome. Most crucially, it doesn’t refresh the page when you translate back and forth, so I can (were I on a damn form with proper labels) use English for field entry, then switch back to Russian for date pickers (and all date pickers I ran across broke) without losing the data I’d already entered.

Why the input placeholders don’t translate, I don’t know, but it proved to be a pain in my ass later.

So then comes the actual data entry. I… don’t have a Russian keyboard. I’m not going to sit on the Windows character map and copy paste out letters. More importantly, there are only two things I could probably spell 90% right off the top of my head: the two cities I’m visiting.

Wikipedia, however, is happy to provide me with Москва and Санкт-Петербург, which I can copy paste alllll day.

Like many travel sites, РЖД has autocomplete for city selection and it really, really wants you to use it. This one is pleasantly forgiving, just changing the city names to all caps.

Looking through the results, I see my train number, but want to double-check the name.

Hrm. Well. The name I was given was already transliterated, and with a lack of phonetic knowledge in the Russian alphabet… Luckily, Greg was on hand and remembered enough of his alphabet (from lessons with X, ironically) to verify that “САПСАН”/”Peregrine Falcon” was what I was looking for. All easy (and now “П” in that and “Санкт-Петербург” are associated in my mind), and I’m steadily trucking. Pick a car, register on the site, then enter passenger info:

РЖД Translated Passenger Info

I keep having to consciously remind myself that “surname” is a last name, and to hope that my middle names being squashed into one word won’t be a problem on-site when my passport is compared to the ticket.

What’s my document type, though? The two obvious options are “Passport” and “Foreign document”. Obviously I don’t have a “Russian passport” or “Passport forms USSR”. Since I don’t have some random governmental diplomatic document, I pick “Passport,” enter the number, and proceed.

*buzz*! Cryptic error:

Неверные параметры запроса. Пожалуйста, измените требования.

Google Translate looked at that parenthetical, kicked over the stage mic, and stomped off the stage. Seriously, what I got out was:

“Invalid query parameters. Please change the requirements.

Changing “COOTBETCTBУET” to “COOTBETCTBUET” is just transliterating, not translating. (Although “cootbet*static*buet” is funny to say.) Anyway, I double-check that when I submit, everything is in the original Russian, that I didn’t miss some validation error when I didn’t enter a “Map Peregrine” (some sort of frequent rider program, I think?), etc.

I email X like, “Waaaat?” afraid that there’s something technical in that error message that I’m missing. I ponder a bit more, mentally stuck on the likely “frequent flyer” field, due to a warning at the top of the page about it being necessary to specify the last 13 digits of… whatever, plus the “Please change the requirements” translated error… Anyway, it doesn’t matter. Turns out that I do, in fact, have “some random governmental diplomatic document”, and so “Foreign document” gets me through.

And then my damn credit card isn’t accepted, just like X’s wasn’t.

So I get back to X, and she has an option that leverages PayPal, but charges a processing fee. Now, keep in mind, I see ruble prices and my mind still evaluates them as Icelandic krónur. (They’re roughly the same order of magnitude, with things seeming to cost a couple thousand of them.) So I have no internalized ability to assess whether a fee of a few hundred rubles is a serious annoyance or not.

X sends me to Туту.ру/, and I apparently enter one of those Braid levels with 4 damn ways to slow/stop/reverse time and no clear indicators of why, sweet goddess, this isn’t clued just a smidge better.

Tutu Untranslated Homepage

(I will note here that I do have X’s phone number and an invitation to call if I run into trouble. I was just having too much fun to do so.)

So the main widget on this page appears to be for flights, not trains, so I go to “Электрички”/”Trains” (which has a green speedy train behind it when you hover).

Tutu Translated Homepage

Protip of the day! This was the wrong thing to do.

But we shall proceed with the story as it happened.

The “Trains” page brings me to a standard travel page like we’ve already seen. Enter “origin”, “destination”, pick a date:

Tutu Translated Page of Hellish Searching

This page, however, will not accept my cities.

  1. I give it “Москва”, and it sometimes autocompletes, letting me choose “Москва (все вокзалы)”/”Moscow (all stations)”.
  2. I give it “Санкт-Петербург”… and nothing.
  3. I try without the hyphen, I try just the “Petersburg” part, I try just the “Saint” part, nothing.
  4. I work the page in Russian.
  5. I start pasting in one letter at a time to see if I can trigger the autocomplete earlier, catch some alternate spelling.
  6. I use Latin letters.
  7. I watch the network requests in the developer tools to see what’s coming back (empty array of results).
  8. I fake a damn “Accept-Language” header of “ru” just in case the backend is being too smart for its own good.

If I submit without one of the autocompletes succeeding, and it tells me it can’t find either city.

(I also try the widget on the right side of the homepage, which also deals in train schedules. The autocomplete does work there, but the results page is the same.)

Tutu Untranslated Error Page of Hellish Searching

I am now fully in “game” mode… or debug mode, which is eerily similar.

I have X’s contact entry up on my phone when I catch a clue. The network request that seeks autocomplete results has “region=msk” in it–the Moscow region, suggesting that it’s limiting my search geographically.

I back out of my phone app, delete the contents of the now tenth version of my “halp!” email draft to X, and get back to work.

I have access to a list of stations on the pre-error search page, but hell if I know which I want. Wikitravel lists Moscow train stations and SPB train stations, suggesting that I want the Leningradsky station out of Moscow. The schedules seem very local, however.

At the very bottom of one of these schedule pages is a link that reads, “Reliable long-distance trains Leningrad station.”

Oh. Ha. Hrm. Guess I’ll click that, then.

Tutu Translated Page of Hope

I know I’m on the right page now because they want me to buy things. Like tickets. We are finally in agreement.

This search works perfectly. I can once again find my Peregrine Falcon, then my car, then my seat. I do, however, run into trouble with the passenger information. I know now that I have a “Foreign Document” rather than a Passport, but those name fields, though:

Tutu What's My Name

I translate the placeholder text manually and get (from left to right): surname, name, and patronymic. Well, I firmly remember that surname is my last name at this point. I don’t have an -yevna” or “-ovna”, of course, but I do have some middle names that would fit right where a patronymic normally would. Hell, one of them is even a family name. Is this acceptable?

This time, inspecting the HTML fields is the key: “lname,” “fname,” and “mname.” I cram all my names into the fields (they also take out the space between my middle names), and continue on.

PayPal is happy to give them my money, all couplefew thousand kronur rubles.

And now I have train tickets.

I am going to make this game with these puzzles. This linguistic cluster of love.

P.S. – I’ve been running WordPress for so long that my core database tables didn’t support UTF-8. >_>