у меня есть Классический ASP приложение, работающее на рабочей станции с Датская версия Windows 7 с участием IIS 7.5.
Эта проблема: Когда приложение записывает логическое значение в виде строки, оно будет писать «True» или «False» на английском сервере. Однако на моей датской установке будет написано «Sand» и «Falsk».
Желаемое решение: Что мне нужно, так это знать, какая конкретная настройка на моей рабочей станции / iis / configuration определяет, на каком языке записывается логическое значение, чтобы гарантировать, что он всегда будет записывать логические значения на английском языке.
Я уже пробовал следующее:
Следующие варианты решения невозможны, поэтому не предлагайте их:
Любые предложения будут оценены. Спасибо.
Я не знаю, применим ли старый хак с региональными настройками OLEAUT, но я думаю, что стоит попробовать - посмотрите, что у вас получится.
http://support.microsoft.com/kb/271587
SetVarConversionLocale должен иметь значение 2, а региональные настройки по умолчанию - американский английский.
Если это не сработает и вы не можете изменить код в своем приложении, запустите виртуальную машину с ОС на английском языке (США). Вы специально этого не исключали :)
ПРИМЕЧАНИЕ. Я также разместил это решение в: https://stackoverflow.com/questions/15760035/boolean-values-in-local-language/44321629#44321629
Здравствуй,
Меня тоже «поймали» с этим «вопросом». Действительно, это не проблема:
У меня была такая же проблема при использовании логических данных в операторе SQL. На моем французском сервере мой оператор SQL был следующим:
<%
'Set my boolean value
Dim myBoolean
myBoolean = True
'Set my SQL Statement
Dim MySQLStatement
MySQLStatement = "SELECT * FROM MyTable WHERE MyBooleanField = " & myBoolean
'=> Here, as MySQLStatement is a STRING, the boolean data was "converted/rendered" as a localized string. So that leads to this output :
'=> SELECT * FROM MyTable WHERE MyBooleanField = Vrai
'Obviously, that SQL Statement is incorrect, because the SQL Engine does NOT understand what is the "Vrai" word - It should be "True" instead.
%>
После долгого чтения веток форумов, решение состоит не в изменении региональных настроек в системе Windows, ни в изменении ключей реестра, ни в изменении Session.LCID, ... Абсолютный и только код решение - преобразовать логическое значение (True | False) в целое число (0 | 1). Тогда это целое число можно будет безопасно использовать в строке и останется (0 | 1).
Вот безопасный способ для использования / преобразования / рендеринга логического значения в нелокализованной форме: Используйте целочисленное значение.
<%
'Set my boolean value
Dim myBoolean
myBoolean = True
'Set my SQL Statement
Dim MySQLStatement
MySQLStatement = "SELECT * FROM MyTable WHERE MyBooleanField = " & BoolToInt(myBoolean)
'=> Here, as MySQLStatement is a STRING, and as the boolean data was previously "converted/rendered" as an integer, we got this correct SQL Statement :
'=> SELECT * FROM MyTable WHERE MyBooleanField = 1
'This SQL Statement is correct, as the SQL Engine DOES understand that 1 is a boolean.
'This Function Returns an INTEGER value based on a BOOLEAN value
Function BoolToInt(v)
'INPUT:
'v Boolean value
'OUTPUT:
'Integer (0|1)
Dim b_OUT
b_OUT = v
'If the Input value is a "True" boolean value (in any language)
if (b_OUT = True) then
BoolToInt = cint(1)
'If the Input value is a "False" boolean value (in any language)
elseif (b_OUT = False) then
BoolToInt = cint(0)
end if
End Function 'BoolToInt
%>
Я очень надеюсь, что это спасет тебе день!
Когда вы меняете региональные настройки в панели управления, вы делаете это для своего профиля пользователя; но рабочий процесс IIS обычно выполняется в других пользовательских контекстах, в зависимости от конфигурации пула (ов) приложений. Вам следует попробовать изменить региональные настройки для этих учетных записей.