2013-12-11 2 views
0

У меня есть этот код C#:Культура «zh-hk» не выводит китайский язык в ASP.NET, но выводит китайский в WinForms?

Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);  
dateScale.EndDate.ToString("dd/MMMM", CultureInfo.CurrentCulture); 

Если установить культуру, чтобы быть "zh-HK", в ASP.NET выход на английском языке. Но когда та же логика запускается как единичный тест (так же, как и приложение WinForms), выход находится на китайском языке.

+2

Где вы установили культуру нить? В веб-приложениях используется большое количество потоков.Установка его на один поток не гарантирует, что он будет доступен для следующего запроса. Кроме того, почему вы передаете текущую культуру ToString()? Это значение по умолчанию. –

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

На сервере, на котором запущен веб-сайт asp.net, установлены правильные языковые пакеты?

По умолчанию .NET framework instalations имеют языковые нейтральные двоичные файлы. Я верю, что для китайцев вам нужно установить языковые языковые пакеты.

Вы можете получить более подробную информацию здесь

http://msdn.microsoft.com/en-us/library/vstudio/5a4x27ek(v=vs.100).aspx

Некоторые примеры этих пакетов dotNetFx40LP_Full_x86_x64de.exe (для немецкого - Германия культуры) и dotNetFx40LP_Full_x86_x64ja.exe (для японской культуры).

ОБНОВЛЕНИЕ: Как писал Панайотис Канавос, это только для вывода строки, как дни недели. Почему вы настраиваете культуру в теме? Вы должны указать культуру в файле web.config.

<globalization uiCulture="zh-HK" culture="zh-HK" /> 
+3

Языковые пакеты не затрагивают строковые операции вообще –

+0

Yup, вы правы. Я неправильно понял вопрос. –

0

Веб-приложения используют несколько потоков для обслуживания большого количества запросов. Настройка культуры в одном потоке не означает, что она будет доступна в других.

Кроме того, культура, используемая для каждого запроса, зависит от параметров глобализации в настройках web.config, уровня страницы и предпочтений языка конечного пользователя. Даже если вы настроили культуру для одного запроса, она будет сброшена, когда поток будет повторно использован для обслуживания другого запроса.

На самом деле нет причин изменять культуру текущей темы, если вы хотите отформатировать определенную культуру. Следующий код будет работать без проблем:

var culture = new CultureInfo("zh-hk");  
Console.WriteLine(DateTime.Now.ToString("dd/MMMM", culture)); 

Это возвращает 11/十二月 (.NET скрипку here).

Установите флажок How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization для настроек, которые необходимо настроить для обеспечения использования определенной культуры для глобализации.

Во-первых, если вы хотите использовать «ZH-HK» для всех страниц, вы можете добавить следующий параметр в web.config:

<system.web> 
    <globalization uiCulture="zh" culture="zh-HK" /> 
</system.web> 

Во-вторых, если вы хотите, чтобы установить культуру программно на страницы, в зависимости от некоторых критериев (например, параметра запроса или настройки профиля пользователя), вы можете переопределить InitializeCulture и установить нужную культуру в свойствах UICulture и Culture.

Наконец, если вы хотите создать язык конкретных страниц, вы можете установить культуру директивы Page каждой страницы:

<%@ Page UICulture="zh" Culture="zh-HK" %> 
+0

Это, безусловно, верно и лучше, чтобы создать культуру и использовать ее. var culture = new CultureInfo ("zh-hk"); Console.WriteLine (DateTime.Now.ToString («dd/MMMM», культура)); Но это не решает проблему, так как она по-прежнему выводит английский, кроме китайского. Причина, по которой я устанавливаю это в коде, отличном от уровня страницы, заключается в том, что я пишу компонент, который, как предполагается, должен быть осведомлен о культуре. Например, этот компонент может размещаться на странице asp.net или wcf. Основываясь на пользовательских параметрах, мне нужно вывести правильный текст для культуры. – daxu

+0

В примере [.NET Fiddle] (http://dotnetfiddle.net/wdbzuZ) возвращается '11/十二月'. Что вы попробовали и что вы вернулись? В любом случае в вашем случае вы должны использовать второй вариант, переопределить InitializeCulture и установить свойства Культуры страницы. –

+0

В примере net скрипта используется console.write, который вернет китайское слово. Но если вы поместите ту же логику в asp.net, выход будет на английском. – daxu