Hi Jack,
Thanks for your reply but that is not quite how NumberFormatInfo.NativeDigits works.
Your example with the locale "gu-IN" shows the Gujarati script equivalent for the Western numbers. In this example simple digit substitution works since the Indian number system is the same as the Western number system, only the characters for the native digits are different. For example the Western number 23 converted to the native Gujarati number format can be done by converting the character for "2" ( "૨" ) followed by the character for "3" ( "૩" ) or ૨૩.
Chinese, Japanese, Korean and Hebrew use different number systems where simple digit substitution does not work because the numbering system is completely different. For these cultures, the NumberFormatInfo.NativeDigits should be set to the Western equivalent: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]. This is the case for all relevant cultures except for the two cultures which I mentioned ("zh-Hans-HK" and "zh-Hans-MO") where there is a bug and it is incorrectly set to the Chinese numbers from 0 to 9.
If you look at this Microsoft documentation on Number Formatting you will see the ellipsis character ( … ) following the example numbers for these special cultures. In Chinese, the number 10 uses the character "十" which is different than "1" ("一") + "0" ( "〇" ). Likewise the Chinese numbering system has special characters used for 100, 1000 and other large numbers. The number "11" in Chinese is "十一" which is the character for "10" followed by the character for "1", it is not the character for "1" repeated twice like in our Western system.
For more information on the Chinese numbering system, you can also look at the Wikipedia Page or this online number converter
Since converting between numbering systems using simple digit substitution does not work for the Chinese, Japanese, Korean and Hebrew numbering systems the NativeDigits array should be set to the Western equivalent for those cultures. If one wants to correctly convert Western numbers to Chinese, you would either need to roll your own (potentially buggy) solution or use an established library like ICU. ICU4C has a .NET wrapper but it is not complete and currently does not expose the functionality to convert between numbering systems.
Kind Regards,
-Taylour