ManuceTranslate a fileTranslate a React or Next.js app into Simplified Chinese

Translate a React or Next.js app into Simplified Chinese

Manuce translates the JSON files of i18next, react-intl or next-intl into Simplified Chinese and returns the same file: keys, {{name}} interpolations and ICU messages untouched, only the values change. What Chinese demands of your code — fonts, a single plural category, no string concatenation — stays on your side.

Upload my file See pricing

What it costs

For the language files of a React or Next.js app totalling about 2,500 words, into Chinese (Simplified):

Essentiel
€24

To understand, internal use.

Professional
€72

Ready to send, by the technical specialist.

Premium
€140

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 Chinese changes in your strings

Simplified Chinese has a single CLDR plural category: other. With i18next, a cart_one / cart_other pair will only ever resolve to cart_other for the zh locale. With react-intl or next-intl, a message such as {count, plural, one {# item} other {# items}} will only use the other branch. A leftover one branch does no harm, but it will never be shown.

Numbers take a measure word that depends on the noun: « 3 条消息 » for messages, « 3 件商品 » for products. A noun stored as its own string and placed next to the number in JSX cannot carry the right measure word, so number and noun belong in the same value.

Word order shifts too: “Hello {{name}}” becomes “{{name}},您好”. Punctuation is full-width (,。:?!) and there are no spaces between words. Then there is register: 您 is the polite form, 你 the direct form common in consumer apps. Decide which you expect and check it on the free sample.

Fonts and layout in a React or Next.js project

A Latin font has no Chinese characters. If you load Inter through next/font with only the latin subset, the browser falls back to a system font that differs from one device to the next. Set an explicit stack for the Chinese locale, for instance Noto Sans SC, then PingFang SC and Microsoft YaHei.

Chinese text is two to three times shorter in characters, but each character is wider: “Save changes” becomes “保存更改”, and the space it takes changes little. Chinese can break between any two characters, so look for headings that split a two-character word across lines.

  • Declare the language in the page’s lang attribute (zh-CN or zh-Hans) so the browser picks simplified glyph forms.
  • text-transform: uppercase does nothing to hanzi and italics read poorly; use weight or colour for emphasis.
  • Avoid {t('hello')} {name}: the JSX space and fixed order do not suit Chinese. Use interpolation within a single value.

What Manuce returns, and what it does not do

You upload the JSON file, for example messages/en.json for next-intl or public/locales/en/common.json for i18next. Manuce returns the same file in the same format: indentation, key order, quotes, comments, line endings, encoding and BOM preserved. Only the values change; a nested key such as checkout.summary.total stays exactly as it was.

  • {{name}} interpolations and ICU messages are kept.
  • Every translated value is checked against the source, variables and tags included (a rich-text tag such as <link>). If a mismatch 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 marked as non-translatable. A dd/MM/yyyy format stays as it is: to show “2024年5月3日”, change it yourself or use Intl.DateTimeFormat with the zh-CN locale.

The report lists translated strings and those left unchanged, with the reason. Manuce does not touch your code, routing or locale configuration, and does not add or remove plural keys. Nor does it produce sworn or certified translations. Pricing is based on the words in the values, keys and tags excluded, with Chinese carrying a ×1.6 coefficient.

Simplified or Traditional, and naming the file

Manuce’s Chinese is Simplified Chinese, as used in mainland China and Singapore. Traditional Chinese (Taiwan, Hong Kong) is a separate language: a simplified file shown to users in Taipei will feel foreign. If you target both audiences, order both languages; from two languages, a 20% discount applies to the whole order.

Name the returned file to match your configuration: zh.json, zh-CN.json or zh-Hans.json must match the locales declared in next-intl’s middleware or in Next.js i18n settings exactly. With i18next, a zh-CN locale without its own file falls back to zh, then to your fallback language: make sure the Chinese file is the one actually loading, not the source.

Preparing the files and checking the result

  1. Start from the most complete, up-to-date source file; a key missing from the source will be missing from the Chinese.
  2. Before uploading, replace concatenations with interpolation: "welcome": "Hello {{name}}, you have {{count}} messages" can become “{{name}},您好,您有 {{count}} 条消息”, not three fragments glued together.
  3. Keep number and noun in the same value so the measure word is right.

Once you have the file:

  • run a build to confirm the JSON loads;
  • view the screens in the Chinese locale on a phone and check the Chinese font is applied everywhere;
  • test count = 1 and count = 5: both should read the other branch;
  • go through the report and handle any values left in the source language.

In practice

  1. Gather the source JSON files (i18next, react-intl or next-intl) and replace concatenations with interpolation.
  2. Upload them to Manuce, choose Simplified Chinese and read the free sample to judge the register.
  3. Download the same file translated and name it after your locale (zh, zh-CN or zh-Hans).
  4. Add a Chinese font, then test screens, plurals and dates using the report.

Frequently asked questions

What happens to my i18next _one and _other keys in Chinese?

The keys stay exactly as they are; Manuce neither renames nor removes them. As Chinese only has the other category, i18next will always read the _other key for the zh locale. The _one key does no harm; it is simply never displayed.

Will the file work for Taiwan or Hong Kong?

No, it is in Simplified Chinese, intended for mainland China and Singapore. Traditional Chinese is a separate language at Manuce and is ordered on its own. The multi-language discount then applies to the whole order.

Why does my Chinese text appear in a different font on each device?

Your font is most likely Latin-only and has no hanzi, so the browser substitutes a system font. Declare a Chinese font stack for the zh locale and set the page’s lang attribute. Manuce does not change your styles.

Will dates be in Chinese format?

Date formats in the file are not translated: a dd/MM/yyyy value stays as it is. To display “2024年5月3日”, edit the value yourself or format dates with Intl.DateTimeFormat and the zh-CN locale.

What if a variable or tag goes missing in translation?

Every translated value is checked against the source. If the mismatch persists, the source value is kept and the report flags it, so you know which string to revisit. Your app will not receive a string with a missing variable.

The specialist in charge

This subject goes to Dédale, the technical specialist. See how it works.

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.

Upload my file