Blog

Building a money app in Armenian, Russian and English from day one

kisir has been in three languages since the first version. That was a decision, not an accident, and it made a few things harder than I expected. Here's what we chose, and why.

By David Piliposyan · · Updated

Update: kisir has spoken 20 languages since version 1.1.2 (October 2026). This post is about the first three, and why they came first.

Why three languages, and why at the start

Armenian, Russian and English are the languages the people around us use on their phones. A group splitting a trip or a flat can easily have all three in one chat. An app that speaks only one of them leaves someone typing numbers into a screen they half understand, and money is the last place for that.

There was also a plainer reason. Retrofitting a language means rewriting every screen. So the rule from the start, before any interface existed, was: no text lives inside a screen. Every word the app shows is looked up by a key, and each language has its own file. It was cheap then. It would have been very expensive later.

The app uses your phone’s language if it has it, and English if not. You can change it in settings, and it changes at once, with no restart.

What we never translate

Two things.

The first is what you type. Group names, names of people and expense descriptions stay exactly as written. A group named in Armenian shows in Armenian to everyone in it, including a friend whose phone is in English.

The second is the server’s answers. Our backend never sends a sentence that you read. When something goes wrong it sends a short code, and the app turns that code into a message in your language. That way a new language is just a new file for the app, and the server stays out of it. Notifications turned out to be the hard part.

The hard part: a name is not a word you can bend

Russian and Armenian both change words for grammar. Armenian attaches endings to nouns, including names. Add a suffix to a name and the word changes shape.

Here’s the problem. An Armenian sentence about someone can need an ending on their name, and which ending depends on how the name ends: one after a consonant, a different one after a vowel. Names in kisir are whatever people type, in any script. Say one friend is “Ani”, another “Mike”, another “Лена”, another a nickname with an emoji. No rule we write can be right for all of them, and a wrong ending on a person’s own name looks sloppy in a way people notice.

So we decided: no grammatical suffix is ever attached to a name. In Armenian, the name stands bare. Where a sentence would have needed an ending, we reshaped the sentence instead. A payment line, for instance, is written like a label: the word for “payment”, a colon-like pause, then “X → Y”. The arrow does the job of the grammar. It doesn’t bend either name.

Russian has a cousin of this problem. Past-tense verbs agree with gender: “he added” and “she added” are different words. The server doesn’t know anyone’s gender, and guessing is worse than not guessing. So the text uses the familiar parenthesis, like “добавил(а)”. It isn’t pretty, but it’s never wrong.

I’ll be honest about one thing. Our first version had some strings that did put endings on names, because that’s how a native speaker writes by instinct. We rewrote them in the bare-name style in a later version.

Notifications: the group name is the title

Notifications taught us one more thing about short text. A phone shows the title and the body together. Our first idea was to write bodies like “Aram joined Yerevan trip”. But then the group’s name appears twice in one banner, once in the title and once in the body.

So the group’s name is always the title, in all three languages, and the body never repeats it: “Aram joined the group”. The title is what you scan to see which of your groups is talking. The body only says what happened.

Plurals

English has two forms: “1 expense”, “2 expenses”. Russian has more, and which one you need depends on the number: one form for 1, another for 2 to 4, another for 5 and up, with exceptions for the teens. “1 участник, 2 участника, 5 участников” is one word in three shapes.

So a counted string in the Russian file carries extra versions that English doesn’t need. It’s a small thing, until a screen says “2 участников” and a Russian reader winces.

Money and numbers

Amounts are formatted by two things working together. The currency decides the digits: euros always show two decimals. The language decides the separators. The same amount reads as €1,234.56 in English and as 1 234,56 € in Russian. The currency itself never changes with the language. A euro expense is euros for everyone, whoever is reading.

We use the phone’s own number and date formatting rather than writing our own. Notifications show an amount with its code, like “26.40 AMD”, not a symbol: a table of symbols for every currency would be a maintenance burden for a cosmetic gain.

The dram

The Armenian dram is awkward for software built around cents, because in everyday life there are none. A bill in drams is a round number, and a bad split of it is as annoying as a bad split of euros.

Say three flatmates split a 10,000 AMD grocery run equally. Three goes into 10,000 as 3,333 with one dram left over. Three payments of 3,333 add up to 9,999, one dram short, so someone takes the extra: 3,334, 3,333 and 3,333 add up to 10,000 exactly. Whatever the unit, a cent or a dram, the shares have to add back to the total. The guide to splitting costs in Armenia covers the local side, and the guide to mixed currencies covers a bill that arrives in another currency.

Layout: the longest string wins

Russian runs about 15 to 30 percent longer than English. “Settle up” becomes “Рассчитаться”. Armenian is longer too, and its letters have taller ascenders and descenders than Latin. We had two rules from that:

  • Buttons and labels wrap or shrink. They never truncate, and nothing has a fixed width.
  • Rows get headroom in their height instead of a tight fixed one.

The tightest place in the whole app is the toggle on the expense screen where you choose Equal, Shares or Amounts: three words in one row. We check it in all three languages, and if one doesn’t fit, the control grows taller rather than clipping a word.

Fonts mattered too. Our main typeface has no Armenian letters. Left alone, the phone would swap in another font glyph by glyph, which mixed weights inside a single word. So in Armenian the whole interface switches to a font that has the script.

What I’d tell someone starting a multilingual app

  1. Externalize every string before the first screen.
  2. Never glue an ending onto something a user typed. Rewrite the sentence.
  3. Let the language choose separators and the currency choose digits.
  4. Have a native speaker read the real thing.

If you split a flat with someone, the guide to splitting rent and shared expenses is a good place to start.

Splitting costs in your own language?

kisir now speaks 20 languages, Armenian and Russian among them, free, with no account and no ads. Pick a name and you're in.

Get kisir