Adding Japanese to Kosshi turned into nine languages

Published on

I'm not particularly strong in English. Programming is basically a wall of English, so I get exposed to it all day, but reading and writing it is still meaningfully harder for me than Japanese. These days I default to browser translation for most foreign-language sites. I suspect a fair number of Japanese developers sit somewhere around here. For the same reason, this English version of the article was itself put together via LLM translation.

The app I make, Kosshi, shipped English-only from day one. The website was bilingual (Japanese and English), but the app itself only spoke English.

There were two reasons. The first is the structure of the outliner genre itself.

The mechanics are simple, but actually harder to use well than they look. It's the kind of tool that only really lands for people who've gone far enough down the productivity-tooling path to end up looking at one — and that pool is small to start with.

On top of that, Kosshi uses Markdown as its formatting layer (raising the bar another notch) and is Mac and iOS only on top of that. The Japan-only addressable audience gets pretty small — going global was the target from day one.

The second reason was localization cost. Even with translation getting much easier in the AI era, taking on many languages when the user base is small honestly didn't feel like it was worth the effort — that was my read at the time.

The app sat English-only for a long stretch, until a wave of feature additions and bug fixes settled down. At that point I made the UI usable in Japanese, just for my own use.

And it turned out to feel more natural than I'd expected.

I'm the developer, so I know every corner of the UI — English doesn't trip me up at all. Even so, the Japanese UI felt more "at home" than I'd expected.

Take the right-click context menu, for instance. Cut, Copy, Paste. About as simple as English gets, and arguably shorter than the Japanese equivalents (切り取り, コピー, ペースト). And yet, for some reason, the Japanese versions land in my head more directly.

And come to think of it, I don't really like seeing days of the week in English either. I sometimes use an outliner to write "date + day of week" notes, and "水" reads so much faster for me than "Wed". Day of week absolutely has to be in Japanese.

Stepping back, all of this is really a UX story. As someone who builds apps, I've always thought UX, at its root, comes down to the accumulation of small improvements in operational feel.

Tweaking animations, adjusting line-height, smoothing the typing response — I've stacked a lot of those small tunings on Kosshi over the years. And yet, set against the small fixes I'd been making more recently, the thing that visibly felt "easier to use" might just have been the moment I flipped the UI to Japanese.

Whether an app supports Japanese isn't usually something you get to choose, and once you get used to it you can manage in English well enough — so it had never really been on my radar. This was a side experiment I'd picked up when I had some breathing room, so I hadn't expected it to land this much. It caught me off guard.

Which means: the same thing must be happening for users in other language groups, too. What I felt with Japanese should also be happening for German users with a German UI, Korean users with a Korean one. So I decided to localize for the languages with sizable user bases, all at once.

I could have done it incrementally — added languages as the user count in each region grew. But I wanted anyone picking up the app for the first time, in any of these languages, to land in something that already felt good from the very first moment.

Niche apps like outliners often only support English in the first place, and a lot of users are used to that and just get on with it. Still — and maybe this counts as a small duty of sorts, especially for someone who isn't strong in English himself — I'd like my own apps not to keep that friction in place.

For which languages to add, I just looked at the major Mac note-taking apps. The result: English, Japanese, German, French, Italian, Spanish, Korean, and Chinese (Simplified and Traditional). Nine in total.

Here's where I hit a real problem.

Even with AI translation getting that much better, I can only personally read English and Japanese. Whether the German is natural, whether the Korean phrasing reads right — I have no way to tell on my own. Paying native reviewers for every release across seven languages isn't realistic at this scale, either.

What I do, roughly, comes down to three things.

One: when I ask the AI to translate, I give it both Japanese and English as reference points. Two anchors tend to produce more stable results than one.

Two: I assemble a small glossary of vocabulary from the outliner / PKM (Personal Knowledge Management) community — Outline, Tag, Bookmark, Sync — words that have something close to a community-standard translation in each language, and feed that as a priority dictionary.

Three: I lean on Apple's localization conventions where I can. Apple Notes, Mail, Calendar give me a baseline of how the OS itself uses each language. If my app sits inside that vocabulary, at least it doesn't read as obviously off.

The two languages I can read, the domain glossary, Apple's standard vocabulary — three reference points to hand the AI, and from between them it can triangulate the target language. Kind of.

Whether this actually works is something I can't fully verify, since I can't read the target languages. But the output is grounded in a lot of context, so something meaningfully more "at home" than raw AI translation should be landing on the other end. That's my hope, anyway.

Looking back, the reason I was able to notice any of this is probably that I carry around an awareness of not being particularly strong in English. A native English speaker building this app probably wouldn't have noticed.

So what at first looks like a disadvantage seems to be turning into a kind of strength — at least when it comes to picking up on this sort of issue — and I find that quietly interesting.

For the record: this nine-language version is coming in the next release, 1.10.0.

Related posts

When there are new posts, I send a single weekly email summarizing them.

You can unsubscribe anytime.