Humanoid names do not render with correct CJK glyphs

Description:

I’m not sure if the person who wrote the typesetter is still at Roblox or not, so I’ll write a slightly more in-depth description. Roblox currently ships with Noto Sans CJK JP v1.004 and uses HarfBuzz to render text with the right locale-specific glyph based on the OpenType locl “localized form” feature. It’ll switch to the Chinese, Taiwanese and Korean variants of the font based on the client’s current locale.

For example, my locale is set to zh_TW, and I will generally see Noto Sans CJK TW as my font instead of Noto Sans CJK JP. The TW font will follow the Republic of China’s “Standard Form of National Characters” instead of the Japanese standard.

All GUI text is rendered with the TW font, but Humanoid names use Noto Sans CJK JP font regardless of locale. To illustrate, a screenshot is attached below. The chat GUI uses the TW glyphs (correctly), but the rendered Humanoid name uses JP glyphs (the bug):

RobloxPlayerBeta_1BX9DLXwsD

To show the differences, please notice (you’ll need a modern web browser and fonts to see the differences on the forum due to some of the characters below being compatibility characters):

  • In JP, the radical for 這 is ⻍, whereas in TW it’s ⻎.
  • In JP, the inner part of 這 has a flat top (like 一), whereas in TW it’s a diagonal dot (like 、).
  • In JP, the bottom part of 骨 is a 月 without the left line being slanted towards the bottom. In TW, it’s known as the “肉部” (the inside parts are like the left side of x if it’s split in half left and right).
  • In JP, the upper part of 雲 (雨) has straight lines on the inside, but in TW it’s like an x, again split left and right.
  • In JP, the 云 has a serif at the bottom-left, whereas TW doesn’t.

Reproduction:

  1. Create a model with a Humanoid and a part named Head inside.
  2. Rename the model to anything with CJK text. In my example, I used 這、骨、雲 as examples as they visibly show the differences between glyph standards.
  3. Observe that there are slight differences between glyphs.

I made a quick test place here, but I don’t know how to make a game uncopylocked anymore: locl test - Roblox. The place file is here: locl test.rbxl (19.2 KB)

Reproducibility:

I am only able to test this on the Windows client.

4 Likes

Thanks for the report, I’ll look into fixing this. The humanoid nameplate rendering is done on a separate path from normal UI text, and it is currently using the default locale instead of passing in the user’s locale.

2 Likes