У нас есть странная ошибка с нашими локализованными ресурсами на китайском языке при использовании .Net 3.5. Эта проблема затрагивает консольные приложения и приложения Windows Forms, и их легко воспроизвести.Китайские ресурсы не работают с .Net 3.5
В основном китайские ресурсы не используются, но используются другие ресурсы (например, французский и английский). Кроме того, он отлично работает, если мы используем .Net 4.x.
Это не так в Windows 7 и Windows 10 (я не пробовал Windows 8.x, но я ожидаю, что это тоже пойдет не так).
Это легко воспроизвести с помощью приложения консоли:
- Создание .Net 3.5 Консоль приложения по умолчанию.
- Добавить файл в ресурс по умолчанию, «Resources.resx» и добавить к нему пару имя/значение: Test, я по-английски
- Добавить файл «Resources.fr.resx» и добавить к нему в имя/значение пары: Test, я французский
- Добавить файл «Resources.zh.resx» и добавить к нему имя/значение пары: тест, я китайский
- Добавьте код ниже до
Main()
Код:
System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture;
Console.WriteLine(System.Threading.Thread.CurrentThread.CurrentUICulture);
Console.WriteLine(ConsoleApplication1.Properties.Resources.Test);
(Первая строка просто удобство, так что мы можем проверить этот код на некитайской системе. Мы можем удалить эту строку при запуске на реальной китайской системе, потому что локаль CurrentUICulture будет уже китайской, без необходимости ее изменения, и ошибка все равно возникает.)
В панели управления | Регион, изменить Формат до English (United States) и запустить программу. Вывод будет:
en-US
I'm English
Теперь измените формат региона на французский (Франция) и запустить программу. Вывод будет:
fr-FR
I'm French
Теперь измените формат региона на Китайский (упрощенный, Китай) и запустить программу. Выходной сигнал будет:
zh-CN
I'm English
Обратите внимание, что он не работает.
Теперь измените свойства проекта, чтобы построить .Net 4 или более позднюю версию, не меняя ничего, и повторно запустите ее. Теперь выход:
zh-CN
I'm Chinese
Так оно работает с .Net 4!
Мои вопросы:
- Может кто-нибудь воспроизвести это?
- Это известная ошибка?
- Есть ли обходной путь?
Немного наземной мины, zh-CN и zh-CHS и zh-Hans все означает упрощенный китайский. Если вам нужен матч на zh-CN, вам нужно выбрать упрощенный китайский язык, характерный для континентального Китая. В дизайнере назвали «Китайский (упрощенный, КНР)». Если вы хотите вернуться, вы должны использовать zh-Hans для своего ресурса. Что-то вроде того. –
@HansPassant Я попробую это. Кажется, это какая-то ошибка, которую они зафиксировали в .Net 4.x, потому что она должна вернуться к «Resources.zh.resx» для всех субкультур китайцев (и действительно делает это в .Net 4.x). Я обнаружил, что использование «Resources.zh-CN.resx» работает в .Net 3.5, но тогда другие диалекты не будут, я полагаю. –
Я нашел этот блог, который кажется связанным: https://blogs.msdn.microsoft.com/shawnste/2007/12/13/zh-hans-zh-hant-and-the-old-zh-chs-zh- CHT /. Также в этой статье также упоминается [документация для CultureInfo] (https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx?f=255&MSPPError=-2147217396), поэтому похоже, что это будет ответ: используйте 'zh-Hans', как вы предложили. –