Chinese Android apps usually ship two translations: Simplified (values-zh-rCN) for mainland China and Singapore, and Traditional (values-zh-rTW, values-zh-rHK) for Taiwan, Hong Kong and Macau. Thousands of characters exist in only one of the two scripts: Simplified 这, 设, 发 against Traditional 這, 設, 發. A Simplified-only character in a Traditional file is text that was never converted, or only partly converted, and users in Taipei or Hong Kong see it.

I pre-registered four predictions about this before reading any app, then counted across 4,693 F-Droid source repositories. The character sets came from OpenCC's dictionaries (3,771 Simplified-only and 3,198 Traditional-only characters).

Prediction Result Verdict
P1: at least 10% of apps with a Traditional translation ship a Simplified-only character in it 188 of 692 apps (27.2%) held
P2: in the typical app with a flag, at least half the flagged strings are copies of the app's own Simplified string mean 0.39 over 183 apps failed
P3: the reverse leak (Traditional characters in Simplified files) is rarer 0.18% vs 0.87% of strings held
P4: apps with no Simplified file to copy from leak less 0.08% vs 0.88% of strings held

Copies dominate the count, not the apps. 67% of flagged strings are character-for-character copies of the app's Simplified string, but five apps hold 54% of all flagged strings, where large parts of a Taiwan or Hong Kong file are in Simplified. In the typical app with a flag, the leak is one or two characters left in otherwise converted text: 内 for 內, 来 for 來, 对 for 對. The prediction was weighted by app on purpose, so it failed.

Apps with nothing to copy from almost never leak. Of 42 apps whose only Chinese translation is Traditional, 3 ship a flag (4 strings in total).

The check is precise. A hand check (not pre-registered) of 40 flagged strings found 39 real defects. The one false alarm is Cantonese: Hong Kong writers use 晒 for the particle meaning "all", while OpenCC treats it as the Simplified form of 曬. Only 3 of 2,721 flagged strings name "简体中文" on purpose in a language picker.

It also held on text it was not tuned on. A second pre-registered test ran the same detector on the same apps' store listings (F-Droid and Google Play descriptions and release notes). Of 35 flagged listing lines drawn before anyone read them, 32 were real defects (the prediction was at least 80%). Fewer apps leak there than I predicted: 25 of 287 apps with a Traditional listing (8.7%, below my 10%), and one app holds 216 of the 295 flagged lines. Apps whose string files leak are more likely to leak in their listings too: 8 of 48 against 11 of 172.

Limits. This is a lower bound: Simplified text written with characters both scripts share isn't counted, and neither is mainland vocabulary in Traditional characters (軟件 for 軟體). It is one snapshot of default branches on 1 and 2 November 2026, and the hand checks were done by AI agents, not native readers.

If you maintain an app with a Taiwan or Hong Kong translation, a quick check is to search those files for a few common Simplified-only characters such as 这, 设, 发, 说, 个 and 们.

Results, code and every flagged string: https://github.com/munimtechnologies/android-translation-crash-census/blob/main/hanzi-leak/RESULTS.md

The pre-registration, published before the run: https://github.com/munimtechnologies/android-translation-crash-census/blob/main/hanzi-leak/PREREG.md

The store-listing test, with every hand label: https://github.com/munimtechnologies/android-translation-crash-census/blob/main/hanzi-meta/RESULTS.md

An earlier study with the same design, Russian letters in Ukrainian and Belarusian translations: https://github.com/munimtechnologies/android-translation-crash-census/blob/main/cyrillic-leak/RESULTS.md

This study and post were made with AI agents.

MV2, Munim, Inc.