Translate a Flutter app into Japanese
Upload your template .arb file and Manuce returns the same file with Japanese values, @@locale set to ja, and a report of what was translated and what was left alone. Placeholders and ICU messages are checked, and plurals are handled with Japanese's single category, other.
What it costs
For the language files of a Flutter app totalling about 2,000 words, into Japanese:
To understand, internal use.
Ready to send, by the technical specialist.
Cross-checked. For documents that commit you.
Price for one language, original layout included. VAT not applicable — article 293 B of the French General Tax Code (CGI). The exact quote, based on your file's word count, is shown before you pay.
What Japanese changes in an ARB file
Japanese has a single CLDR plural category
other. A message written for English such as {count, plural, =1{1 message} other{{count} messages}} therefore needs at least an other branch, for example {count, plural, other{{count} 件のメッセージ}}. Manuce checks the structure of plural and select messages and adds the target language's plural categories. An explicit =0 branch is still worth keeping if you want メッセージはありません rather than "0 件".
Japanese counts with counter words (助数詞)
件 for messages or results, 個 for objects, 人 for people, 枚 for photos or tickets. The right one depends on what {count} refers to, and the description in the @ key is what tells the translator.
Word order changes too, with the verb at the end
Delete {fileName}? becomes {fileName}を削除しますか?. The placeholder moves, which ICU allows without touching your Dart code. A sentence assembled by concatenation in code ('Delete ' + name), however, can never read correctly in Japanese
merge it into one message with a placeholder before translation.
Gender select messages ({gender, select, male{…} female{…} other{…}}) often end up with identical branches in Japanese, since most interface sentences do not mark gender. That is expected, not a fault.
Register, scripts and punctuation on screen
A Japanese interface uses the polite form (です/ます) in sentences and short noun forms on buttons
保存 for "Save", キャンセル for "Cancel". Error messages stay courteous
接続できませんでした。もう一度お試しください。 For apps aimed at business customers, more formal keigo (ご利用いただけます) is expected in onboarding text.
Three scripts mix
kanji for concepts, hiragana for grammar, katakana for loanwords (アカウント, ログイン). Katakana loanwords can be long and every character is full-width, so a label like アカウント設定 may overflow a button sized for "Settings". Plan for TextOverflow.ellipsis or wrapping in narrow areas.
Punctuation is full-width
、 and 。, ? for questions, and 「」 instead of straight or curly quotes. No spaces between words or before punctuation, and no full stop on buttons or headings.
A Flutter-specific trap
kanji share Unicode code points with Chinese characters. If the app does not declare Locale('ja') in supportedLocales, or the font falls back to a Chinese design, some characters render with Chinese glyph shapes, which a Japanese reader notices at once. Declare the locale and, if needed, bundle a Japanese font such as Noto Sans JP.
What Manuce returns, and what it does not do
You upload your template file, say app_en.arb, in whatever source language you work in, and get back the same file with only the values in Japanese. Indentation, key order, quotes, comments, line endings, encoding and BOM are preserved. @@locale is switched to ja
save the file as app_ja.arb in your translations folder.
@ keys are skipped
their descriptions are used as context, and metadata such as placeholder types and date format stays untouched. Every translated value is compared with the source
if a {count} or a tag is missing and the mismatch persists, the source value is kept and the report says so, so flutter gen-l10n does not fail.
Not translated keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers and anything you mark as non-translatable. You pay for the words in the values only, keys and tags excluded, with Japanese carrying a ×1.6 coefficient.
- Only the uploaded file is translated strings hard-coded in Dart stay in the source language.
- Rendering on a device (overflow, glyphs) is not tested.
- Manuce does not provide sworn or certified translation if Japanese terms of use must be certified, you need a sworn translator.
Preparing the project and checking afterwards
A little preparation in the template file prevents most mistranslations into Japanese
- Add a
descriptionto every ambiguous key "button that sends the form" steersSubmittowards送信rather than提出(handing in a document). - State what each
{count}counts, so the right counter word is used. - Keep dates and numbers out of the strings
a
DateTimeplaceholder with"format": "yMMMd"renders as2025年3月14日throughintl. - Add
jato your supported locales and, for iOS, toCFBundleLocalizationsinInfo.plist. - Run
flutter gen-l10n, then switch a device to Japanese look for truncated buttons, awkward line breaks and Chinese-style kanji. - Read the report every string left in the source language is listed with the reason.
In practice
- Add descriptions to the @ keys of your template .arb file, especially for counters and buttons.
- Upload the file to Manuce and review the quote and the free Japanese sample.
- Download the translated file and the report of strings left unchanged.
- Save it as app_ja.arb, declare the ja locale and run flutter gen-l10n.
- Check the layout on a device set to Japanese.
Frequently asked questions
Do I need to keep the =1 branch in Japanese plurals?
No. Japanese only uses the other category, which Manuce adds if it is missing. An explicit =0 branch can still be useful for a dedicated empty-state sentence. Either way the message remains valid for flutter gen-l10n.
Can my placeholders move within the sentence?
Yes, and in Japanese they usually do, because the verb comes last {fileName} moves to the front in {fileName}を削除しますか?. The names and number of placeholders must stay the same, and Manuce checks this for every value.
What happens if a variable goes missing in translation?
Each translated value is compared with the source. If the mismatch persists, the source value is kept and flagged in the report, so code generation does not break. You know exactly which strings to revisit.
Why do some kanji look Chinese in my app?
Kanji and Chinese characters share Unicode code points, and the glyph shape depends on locale and font. Declare Locale('ja') in supportedLocales and, if needed, a Japanese font. This is a project setting, not something the .arb file controls.
How is the price worked out for Japanese?
The quote is calculated on upload from the exact word count of the values, keys and tags excluded. Japanese is a surcharged language with a ×1.6 coefficient on the per-word rate. You can see a free sample before paying.
The specialist in charge
This subject goes to Dédale, the technical specialist. See how it works.
The same file, into another language
Into Japanese, other files
See also
Try it on your own file, free
A sample of your file translated at the level you choose, before any payment. You judge, then you decide.