Translate a Flutter App into Simplified Chinese
Upload your app's source .arb file and Manuce translates the values into Simplified Chinese, returning the same file ready to save as app_zh.arb. Placeholders and ICU messages are checked, @@locale is set to zh, and a report lists every string left untouched and why.
What it costs
For the language files of a Flutter app totalling about 2,000 words, into Chinese (Simplified):
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 changes in an .arb file when the target is Chinese
A Flutter app localised with flutter gen-l10n keeps its strings in .arb files: app_en.arb (or whichever source language you write in) and app_zh.arb for the target. Moving to Simplified Chinese affects things a European language never does.
- Punctuation becomes full-width.
"Hello, {name}!"becomes"你好,{name}!": Chinese comma and exclamation mark. Colons become:and full stops。. - There are no spaces between words.
"{count} files selected"becomes"已选择 {count} 个文件": the word order changes and a measure word,个, sits between the number and the noun. - Only one plural form. CLDR rules for Chinese have a single category,
other; nouns do not change with quantity.
The text uses two to three times fewer characters, but each character is wider than a Latin letter, so the space taken on screen changes little. A button that is too narrow in English will often still be too narrow in Chinese, while a very short label may look lost in a button sized for the source.
Plurals, select and measure words
An ICU message such as {count, plural, =0{No messages} =1{One message} other{{count} messages}} becomes {count, plural, =0{没有消息} other{{count} 条消息}} in Chinese. Manuce checks the message structure and makes sure the other category, the only one Chinese uses, is present: it is the case flutter gen-l10n requires. Exact cases such as =0 can stay where a dedicated wording reads better.
The real trap lies elsewhere: the measure word depends on what is being counted. Messages take 条消息, photos 张照片, files 个文件, contacts 位联系人. A key called itemCount with no description does not say what is counted, so the description in @itemCount matters.
For gender select messages, written Chinese distinguishes 他 (he) from 她 (she), although both sound the same. The other branch gets a neutral form suited to the context, for instance 对方 ("the other person") in a chat app.
What Manuce returns, and what it does not do
- The same file in the same format: indentation, key order, quotes, line endings, encoding and BOM preserved. Only the values change.
@metadata keys are not translated; their descriptions are used as context.@@localeis switched to the target language.- Every translated value is compared with the source: if a placeholder such as
{count}or{name}is missing or altered and the discrepancy persists, the source value is kept and the report says so. - Not translated: keys, empty values, URLs, email addresses, numbers, colours, date formats, identifiers, and anything you mark as non-translatable.
- Pricing is based on the words in the values, keys and tags excluded; Chinese carries a ×1.6 coefficient on the per-word rate.
Manuce does not edit your pubspec.yaml, your supportedLocales or your fonts, and does not test the display on a device. Traditional Chinese (Taiwan, Hong Kong) is a separate language and needs its own file; the multi-language discount applies from two languages. Manuce does not produce sworn or certified translations either, so terms that must be certified need a qualified translator.
Preparing the source file
- Describe ambiguous keys.
"@send": {"description": "Button: send a chat message"}points to发送rather than a verb for posting a parcel. For one-word labels like "Read" or "OK", the description makes all the difference. - Remove string concatenation in Dart. Code like
'Hello ' + namebreaks in Chinese, where word order changes. Use a placeholder in the .arb instead:"greeting": "Hello, {name}". - Flag brand names and terms that must stay in Latin script, so they are marked non-translatable.
- Leave dates to
intl. Date formats are not translated: with thezhlocale,DateFormat.yMMMdalready outputs2024年5月3日. Do not hard-code "3 May" in a value. - Save the file as UTF-8, the encoding Flutter expects for .arb files; it will be kept as is.
Checks after delivery
- Save the returned file as
app_zh.arbin your translations folder, confirm that@@localereadszh, then runflutter gen-l10nagain. - Add
Locale('zh')to your supported locales and, for iOS, declarezhamong the localisations inInfo.plist. - Fonts: a Latin-only font bundled through
pubspec.yamlhas no Chinese glyphs, so Flutter falls back to the system font. Check the result, and if you bundle a Chinese font, bear its file size in mind. - Glyph shapes: without a precise locale, some characters may render in their Japanese variants. Setting
Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans')avoids this. - Layout: Chinese can wrap between any two characters; check
maxLines, ellipses and line height, as ideographs are taller than Latin lowercase. - Read the report: every string left in the source language is listed with its reason.
In practice
- Upload your source .arb file: the quote appears at once, based on the words in the values.
- Choose Simplified Chinese and a level, then read the free one-paragraph sample.
- Pay and download the translated file and its report from your account within minutes.
- Save it as app_zh.arb, run flutter gen-l10n and check fonts and layout on a device.
Frequently asked questions
Should I order Simplified or Traditional Chinese?
Simplified is used in mainland China and Singapore, Traditional in Taiwan and Hong Kong. Manuce treats them as two separate languages, each producing its own .arb file. If you target both audiences, order both; the multi-language discount applies from two languages.
Will my ICU plural messages still compile with flutter gen-l10n?
ICU plural and select messages are checked, and the other category, the only one Chinese uses, is present. If a placeholder cannot be kept intact, the source value is retained and flagged in the report, so you do not receive a file that fails to build.
Will Chinese characters display with my current font?
Not if your app bundles a Latin-only font: the characters will fall back to the device's system font. Manuce does not touch your fonts, so check the rendering after integration and set the zh locale with the Hans script to avoid Japanese glyph variants.
Are keys and placeholders included in the word count?
No. Pricing covers the words in the values only, with keys and tags excluded. @ metadata is not translated, and the ×1.6 coefficient for Chinese applies to the per-word rate.
How do I know which strings were not translated?
The report delivered with the file lists translated strings and those left as they were, with the reason: URL, identifier, empty value, item marked non-translatable, or a persistent mismatch on a variable.
The specialist in charge
This subject goes to Dédale, the technical specialist. See how it works.
The same file, into another language
Into Chinese (Simplified), 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.