Phase 2, last of four. 781 strings, machine-made and marked Beta, on the same terms as the languages before it — the report link stands in for the native speaker we do not have, and a missing entry falls back to English, so deleting a bad line is a valid fix.
Plurals: there are none.Intl.PluralRules("ja") returns other for every number, checked rather than assumed. Counters do the work a plural would:
通 for letters, 件 for conversations and items. That is why these are separate entries rather than one pattern: the number alone does not decide the word that follows it, and no amount of plural machinery would have picked between them.
Register is です・ます throughout, with the pronoun dropped. Where English says "your mailbox" this file usually just says メールボックス, because that is what a Japanese interface does; あなた appears nowhere. Buttons are the bare noun or verb stem — 送信, 返信, 削除 — not a sentence.
Script mixing is deliberate, not drift. Kanji for the noun that carries the meaning, katakana for the loanword the reader already knows (メール, フォルダー, アーカイブ, カレンダー), hiragana for the grammar between them. Long vowels keep their ー. The header records this so a later editor does not "tidy" フォルダー into something nobody says.
A few strings are reordered rather than translated word-for-word, because Japanese puts the frame before the content: "{used} of {total}" becomes "{total} 中 {used}", which renders as 2.0 GB 中 700 MB.
Verified
Against the mock server, in a visible tab:
role folders localise (受信トレイ, アーカイブ, ゴミ箱, 下書き, 迷惑メール, 送信済み), custom ones — Newsletters, Work — left as the user named them
45 件のスレッド renders through the single plural form
dates follow the language: 8月30日, 21:56
the catalogue code-splits into its own chunk, 50.3 kB (18.4 kB gzipped)
npx tsc --noEmit, scripts/i18n-catalog-check.mjs (781/796, level with the rest), 109 node tests, 459 web tests, npm run build.
One layout note
In the mobile bottom rail, カレンダー truncates to カレン…. The label is longer than any of the six that came before it, so this is the first language to hit that rail's width. Cosmetic, and a layout fix rather than a translation one — a shorter label would be 予定表, which is accurate but reads as older Japanese than a mail client should.
Closes the Phase 2 set alongside #155 (Russian), #156 (Ukrainian) and #157 (Chinese, Simplified).
Phase 2, last of four. 781 strings, machine-made and marked **Beta**, on the same terms as the languages before it — the report link stands in for the native speaker we do not have, and a missing entry falls back to English, so deleting a bad line is a valid fix.
**Plurals: there are none.** `Intl.PluralRules("ja")` returns `other` for every number, checked rather than assumed. Counters do the work a plural would:
```ts
"{n} messages": { other: "{n} 通のメール" },
"{n} conversations": { other: "{n} 件のスレッド" },
```
通 for letters, 件 for conversations and items. That is why these are separate entries rather than one pattern: the number alone does not decide the word that follows it, and no amount of plural machinery would have picked between them.
**Register** is です・ます throughout, with the pronoun dropped. Where English says "your mailbox" this file usually just says メールボックス, because that is what a Japanese interface does; あなた appears nowhere. Buttons are the bare noun or verb stem — 送信, 返信, 削除 — not a sentence.
**Script mixing is deliberate, not drift.** Kanji for the noun that carries the meaning, katakana for the loanword the reader already knows (メール, フォルダー, アーカイブ, カレンダー), hiragana for the grammar between them. Long vowels keep their ー. The header records this so a later editor does not "tidy" フォルダー into something nobody says.
A few strings are reordered rather than translated word-for-word, because Japanese puts the frame before the content: `"{used} of {total}"` becomes `"{total} 中 {used}"`, which renders as **2.0 GB 中 700 MB**.
### Verified
Against the mock server, in a visible tab:
- role folders localise (受信トレイ, アーカイブ, ゴミ箱, 下書き, 迷惑メール, 送信済み), custom ones — Newsletters, Work — left as the user named them
- `45 件のスレッド` renders through the single plural form
- dates follow the language: 8月30日, 21:56
- the catalogue code-splits into its own chunk, 50.3 kB (18.4 kB gzipped)
`npx tsc --noEmit`, `scripts/i18n-catalog-check.mjs` (781/796, level with the rest), 109 node tests, 459 web tests, `npm run build`.
### One layout note
In the mobile bottom rail, カレンダー truncates to `カレン…`. The label is longer than any of the six that came before it, so this is the first language to hit that rail's width. Cosmetic, and a layout fix rather than a translation one — a shorter label would be 予定表, which is accurate but reads as older Japanese than a mail client should.
Closes the Phase 2 set alongside #155 (Russian), #156 (Ukrainian) and #157 (Chinese, Simplified).
**Merged** 2026-08-31 as coffey-labs/ihasmail@a440e54922f9
<sub>Rebuilt from: git history, session transcript.</sub>
This repo is archived. You cannot comment on issues.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Phase 2, last of four. 781 strings, machine-made and marked Beta, on the same terms as the languages before it — the report link stands in for the native speaker we do not have, and a missing entry falls back to English, so deleting a bad line is a valid fix.
Plurals: there are none.
Intl.PluralRules("ja")returnsotherfor every number, checked rather than assumed. Counters do the work a plural would:通 for letters, 件 for conversations and items. That is why these are separate entries rather than one pattern: the number alone does not decide the word that follows it, and no amount of plural machinery would have picked between them.
Register is です・ます throughout, with the pronoun dropped. Where English says "your mailbox" this file usually just says メールボックス, because that is what a Japanese interface does; あなた appears nowhere. Buttons are the bare noun or verb stem — 送信, 返信, 削除 — not a sentence.
Script mixing is deliberate, not drift. Kanji for the noun that carries the meaning, katakana for the loanword the reader already knows (メール, フォルダー, アーカイブ, カレンダー), hiragana for the grammar between them. Long vowels keep their ー. The header records this so a later editor does not "tidy" フォルダー into something nobody says.
A few strings are reordered rather than translated word-for-word, because Japanese puts the frame before the content:
"{used} of {total}"becomes"{total} 中 {used}", which renders as 2.0 GB 中 700 MB.Verified
Against the mock server, in a visible tab:
45 件のスレッドrenders through the single plural formnpx tsc --noEmit,scripts/i18n-catalog-check.mjs(781/796, level with the rest), 109 node tests, 459 web tests,npm run build.One layout note
In the mobile bottom rail, カレンダー truncates to
カレン…. The label is longer than any of the six that came before it, so this is the first language to hit that rail's width. Cosmetic, and a layout fix rather than a translation one — a shorter label would be 予定表, which is accurate but reads as older Japanese than a mail client should.Closes the Phase 2 set alongside #155 (Russian), #156 (Ukrainian) and #157 (Chinese, Simplified).
Merged 2026-08-31 as coffey-labs/ihasmail@a440e54922
Rebuilt from: git history, session transcript.