Lesstep
Examples · Updated November 1, 2026

Examples of our work

These are pull requests we sent to open-source projects, and a sample of the free check. Each one shows the item from our checklist it falls under, what was wrong, and how we checked the fix before sending it. One has been merged so far; the maintainers are reviewing the rest.

Pull requests

ifme: the whole app in Japanese

Checklist: the translation itself, with the tone (one polite register) and the words Japanese apps use.

What we did: ifme, an open-source app for sharing mental health experiences with people you trust, had no Japanese. We added the Japanese locale: 738 keys for the app, 63 for sign-in and invitations, in the same order as the English files. Japanese has no spaces, so the app's crisis keywords match as parts of longer text. We picked phrases people write when they mean it, and left out single characters that also sit inside everyday words.

How we checked: a script compared every file with the English one for missing keys, placeholders and HTML tags, the same comparison the project's own test makes, and every locale file still parses.

Status: sent October 28, 2026; the maintainers are reviewing it. ifme #2529

SmartNews Media Research Institute's bill data: Roman numerals that came out garbled

Checklist: item 18, read Shift_JIS as cp932.

What we did: the institute's open dataset collects the bills listed on the website of Japan's House of Representatives. The pages say they are Shift_JIS, but they use characters such as Ⅰ and Ⅸ that only cp932, the Windows version of Shift_JIS, has. Read as Shift_JIS, as the pages declare, those came out as U+FFFD. The fix reads the pages as cp932 in the three places it downloads one.

How we checked: we decoded one saved page both ways: two U+FFFD as Shift_JIS, none as cp932, with Ⅰ and Ⅱ back in the titles.

Status: sent October 29, 2026; the maintainers are reviewing it. house-of-representatives #2

OpenHome: the long vowel mark ー saved as a 0

Checklist: not one of the twenty. It is a character table, the kind of thing we look for when an app writes Japanese in its own encoding.

What we did: OpenHome moves game characters between save files of different game generations. The table that writes names for the fourth generation had no ー (U+30FC), so a Japanese name with it was written with a 0 in its place. We added ー to both of the project's tables, and made characters the table doesn't have come out as ? instead of 0.

How we checked: we matched the code against the Japanese games' character table as another open-source save editor lists it, and added two regression tests. The project's own CI, run on our fork, passes its 1,049 tests, type check and lint.

Status: sent October 29, 2026; the maintainer is reviewing it. OpenHome #1096

pandas_market_calendars: the Tokyo Stock Exchange open on 14 holidays before 1997

Checklist: item 12, Japanese public holidays.

What we did: pandas_market_calendars, a Python library of exchange trading calendars, takes Tokyo's holidays from another library whose lists begin in 1997. Before that it used the same rules without the lists, so 14 weekday holidays between 1990 and 1996, among them equinox days, the 1990 enthronement ceremony and the 1993 royal wedding, came back as trading days. We added those 14 days to the Tokyo calendar only.

How we checked: each date is in the Cabinet Office's list of national holidays and falls on a weekday. The project's own tests, run on our fork: the new test fails without the fix (March 21, 1990 comes back as a trading day), and all 15 jobs pass with it.

Status: merged October 31, 2026. pandas_market_calendars #514

Static-DICOMWeb: patient names stored garbled

Checklist: not one of the twenty. It is the same kind of fault as item 18: text read in the wrong encoding.

What we did: Static-DICOMWeb turns medical image files (DICOM) into a static web archive. When a file says its text is UTF-8, the tool decodes text fields again as UTF-8, but patient names skipped that step, so a name outside Latin letters was stored as its UTF-8 bytes read as Latin-1, and a search by name found nothing. The report used Cyrillic names; Japanese names break the same way. We passed the setting through for patient names, in four lines.

How we checked: a new test with two made-up Japanese names. The project's own CI, run on our fork: the test fails without the fix and gets back the Latin-1 form, and all 287 tests and the build pass with it.

Status: sent October 30, 2026; the maintainers are reviewing it. Static-DICOMWeb #160

curl.md: Japanese pages served as Shift_JIS came out garbled

Checklist: not one of the twenty. It is the same kind of fault as item 18: text read in the wrong encoding.

What we did: curl.md turns a web page into Markdown for AI agents. It always decoded pages as UTF-8, so a page served as Shift_JIS, an older Japanese encoding, came out as replacement characters. We decode with the charset the page declares, in its header or in a meta tag in the first 1024 bytes, the way browsers do, and keep UTF-8 when it declares none.

How we checked: two new tests serve a Shift_JIS page, one declaring it in the header and one in a meta tag. The project's own Check workflow, run on our fork: the two tests fail without the fix, and all 605 tests pass with it.

Status: sent October 31, 2026; the maintainers are reviewing it. curl.md #91

Lector: furigana run into the words they annotate

Checklist: not one of the twenty. Furigana are the small readings set over kanji, written in HTML with ruby tags.

What we did: Lector is a language-learning reader that imports EPUB books and web pages. The import kept the text inside every tag, readings included, so 試験 with its reading しけん became 試験しけん, a second word next to the one it annotates. We drop the readings (the rt and rp elements) before the tags are stripped, so only the base text is left.

How we checked: a new test builds a one-chapter EPUB with a short, made-up Japanese sentence carrying four readings. The project's API tests and lint, run on our fork: the test fails without the fix with the readings inline, and all 1,334 API tests pass with it.

Status: sent October 31, 2026; the maintainers are reviewing it. lector #651

These projects are independent of Lesstep and have not reviewed or endorsed this service; each card links to the public pull request.

A free check: what you get back

We tried the check on an open-source web app. We read its repository at one commit, without running the app, and wrote it up as a reply that gives the file and line for each item and a link to the fix. In short:

The same check for your app, free: send your app's URL, and the repository if your code is public, to support@lesstep.com. No login or payment details needed.

Lesstep translates web apps into Japanese and delivers them as one pull request. Complete (US$249) runs your app, checks every screen in Japanese, and fixes what it finds in the same pull request.

Excel and Windows are trademarks of the Microsoft group of companies. This page is not affiliated with or endorsed by Microsoft.

More: Japanese localization checklist · Japanese localization for your web app