ResourceManager
От: Аноним  
Дата: 02.11.04 09:38
Оценка:
На что смотрит сабж при выборе культуры при вызове метода GetString()??? Не на UICulture потока, его вызывающего точно.
Re: ResourceManager
От: Сантехник Беларусь  
Дата: 02.11.04 09:44
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>На что смотрит сабж при выборе культуры при вызове метода GetString()??? Не на UICulture потока, его вызывающего точно.


Если не указано, то на CurrentUICulture.
Выдрано рефлектором:
public virtual string GetString(string name, CultureInfo culture)
{
      if (name == null)
      {
            throw new ArgumentNullException("name");
      }
      if (culture == null)
      {
            culture = CultureInfo.CurrentUICulture;
      }
...
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[2]: ResourceManager
От: Аноним  
Дата: 02.11.04 09:52
Оценка:
Здравствуйте, Сантехник, Вы писали:

С>Здравствуйте, <Аноним>, Вы писали:


А>>На что смотрит сабж при выборе культуры при вызове метода GetString()??? Не на UICulture потока, его вызывающего точно.


С>Если не указано, то на CurrentUICulture.

С>Выдрано рефлектором:
С>
С>public virtual string GetString(string name, CultureInfo culture)
С>{
С>      if (name == null)
С>      {
С>            throw new ArgumentNullException("name");
С>      }
С>      if (culture == null)
С>      {
С>            culture = CultureInfo.CurrentUICulture;
С>      }
С>...
С>


Нихера. В CultureInfo.CurrentUICulture у меня стоит danish, но тянет все равно english. Причем первый раз изменение культуры потока отражается на ResourceManager, а потом он всегда тянет нейтральные ресурсы.
Re: ResourceManager
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.04 09:53
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>На что смотрит сабж при выборе культуры при вызове метода GetString()??? Не на UICulture потока, его вызывающего точно.


Точно на него.
... << RSDN@Home 1.1.4 beta 3 rev. 219>>
AVK Blog
Re[2]: ResourceManager
От: Аноним  
Дата: 02.11.04 09:55
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


А>>На что смотрит сабж при выборе культуры при вызове метода GetString()??? Не на UICulture потока, его вызывающего точно.


AVK>Точно на него.


Сам попробуй. Только сделай несколько потоков, у каждого свою культуру. И меняй ее довольно часто.
Re[3]: ResourceManager
От: Сантехник Беларусь  
Дата: 02.11.04 10:03
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Нихера.

Низзя!

А>В CultureInfo.CurrentUICulture у меня стоит danish, но тянет все равно english.

В danish ресурсах точно нужные строки есть?

А>Причем первый раз изменение культуры потока отражается на ResourceManager, а потом он всегда тянет нейтральные ресурсы.

Что значит первый раз?
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[4]: ResourceManager
От: Аноним  
Дата: 02.11.04 10:06
Оценка:
Здравствуйте, Сантехник, Вы писали:

С>Здравствуйте, <Аноним>, Вы писали:


А>>Нихера.

С>Низзя!
Ладно.

А>>В CultureInfo.CurrentUICulture у меня стоит danish, но тянет все равно english.

С>В danish ресурсах точно нужные строки есть?
Точно.

А>>Причем первый раз изменение культуры потока отражается на ResourceManager, а потом он всегда тянет нейтральные ресурсы.

С>Что значит первый раз?
Первый вызов System.Threading.Thread.CurrentTheread.CurrentUICulture приводит к тому, что ResourceManager.GetString() вытягивает правильные строки. Все последующие вызовы сбрасывают культуру на нейсральную. Причем только для потоков, запустившихся не первыми.
Re[3]: ResourceManager
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.04 10:15
Оценка:
Здравствуйте, <Аноним>, Вы писали:

AVK>>Точно на него.


А>Сам попробуй.


А то я не пробовал

А> Только сделай несколько потоков, у каждого свою культуру. И меняй ее довольно часто.


Вон у нас в сервере приложений культура задается каждым пользователем при логине. Все прекрасно работает.
... << RSDN@Home 1.1.4 beta 3 rev. 219>>
AVK Blog
Re[5]: ResourceManager
От: _FRED_ Черногория
Дата: 02.11.04 10:19
Оценка: +1
Здравствуйте, Аноним, Вы писали:
А>>>Причем первый раз изменение культуры потока отражается на ResourceManager, а потом он всегда тянет нейтральные ресурсы.
С>>Что значит первый раз?
А>Первый вызов System.Threading.Thread.CurrentTheread.CurrentUICulture приводит к тому, что ResourceManager.GetString() вытягивает правильные строки. Все последующие вызовы сбрасывают культуру на нейсральную. Причем только для потоков, запустившихся не первыми.

Для каждого вновь созданного потока устанавливается требуемое значение?
Help will always be given at Hogwarts to those who ask for it.
Re[6]: ResourceManager
От: Аноним  
Дата: 02.11.04 11:04
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Здравствуйте, Аноним, Вы писали:

А>>>>Причем первый раз изменение культуры потока отражается на ResourceManager, а потом он всегда тянет нейтральные ресурсы.
С>>>Что значит первый раз?
А>>Первый вызов System.Threading.Thread.CurrentTheread.CurrentUICulture приводит к тому, что ResourceManager.GetString() вытягивает правильные строки. Все последующие вызовы сбрасывают культуру на нейсральную. Причем только для потоков, запустившихся не первыми.

_FR>Для каждого вновь созданного потока устанавливается требуемое значение?


Конечно. Шо я ламер
Re[4]: ResourceManager
От: Аноним  
Дата: 02.11.04 11:05
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


AVK>>>Точно на него.


А>>Сам попробуй.


AVK>А то я не пробовал


А>> Только сделай несколько потоков, у каждого свою культуру. И меняй ее довольно часто.


AVK>Вон у нас в сервере приложений культура задается каждым пользователем при логине. Все прекрасно работает.


У меня тоже работает, если один раз задать. Но если в процессе работы культуру менять по несколько раз, потом не работает!
Re[5]: ResourceManager
От: Andrbig  
Дата: 02.11.04 11:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>У меня тоже работает, если один раз задать. Но если в процессе работы культуру менять по несколько раз, потом не работает!


Мсье знает толк в извращениях!
Re[5]: ResourceManager
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.04 11:34
Оценка:
Здравствуйте, <Аноним>, Вы писали:

AVK>>Вон у нас в сервере приложений культура задается каждым пользователем при логине. Все прекрасно работает.


А>У меня тоже работает, если один раз задать. Но если в процессе работы культуру менять по несколько раз, потом не работает!


А как ты представляешь себе один раз задать для сервера? У него на каждый вызов отдельный поток заводится.
... << RSDN@Home 1.1.4 beta 3 rev. 219>>
AVK Blog
Re[6]: ResourceManager
От: Аноним  
Дата: 02.11.04 11:35
Оценка:
Здравствуйте, Andrbig, Вы писали:

A>Здравствуйте, Аноним, Вы писали:


А>>У меня тоже работает, если один раз задать. Но если в процессе работы культуру менять по несколько раз, потом не работает!


A>Мсье знает толк в извращениях!


Почему это извращение, имхо нормальная ситуация. Юзер захотел буквочки на другом языке, не рестартовать же все приложение!
Re[7]: ResourceManager
От: Andrbig  
Дата: 02.11.04 11:52
Оценка:
Здравствуйте, Аноним, Вы писали:

A>>Мсье знает толк в извращениях!


А>Почему это извращение, имхо нормальная ситуация. Юзер захотел буквочки на другом языке, не рестартовать же все приложение!


Да ладно, не кипятись, это ж шутка. Я вон и смайлик поставил...

А серьезно — так одно из трех.
1. что не так в архитектуре программы — надо идти другим путем
2. что не так в самом НЕТе и... надо снова идти другим путем
3. ошибка в коде (ДНК или программы)

Дай небольшой пример того, как не срабатывет переключение м/д культурами — я посмотрю у себя, может что прояснится...
Re[6]: ResourceManager
От: Аноним  
Дата: 02.11.04 12:04
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


AVK>>>Вон у нас в сервере приложений культура задается каждым пользователем при логине. Все прекрасно работает.


А>>У меня тоже работает, если один раз задать. Но если в процессе работы культуру менять по несколько раз, потом не работает!


AVK>А как ты представляешь себе один раз задать для сервера? У него на каждый вызов отдельный поток заводится.


Пишу в сессию название культуры и в HttpApplication.PreRequestHandlerExecute ставлю потоку UICulture.
Re[7]: ResourceManager
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.04 12:20
Оценка:
Здравствуйте, <Аноним>, Вы писали:

AVK>>А как ты представляешь себе один раз задать для сервера? У него на каждый вызов отдельный поток заводится.


А>Пишу в сессию название культуры и в HttpApplication.PreRequestHandlerExecute ставлю потоку UICulture.


Разбирайся в своем коде, ResourceManager работает нормально. Вот специально попробовал:
ResourceManager rm = new ResourceManager("RMTest.Resource1", GetType().Assembly);
textBox1.AppendText(rm.GetString("Test"));
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru");
textBox1.AppendText(rm.GetString("Test"));

Выводятся разные строки.
... << RSDN@Home 1.1.4 beta 3 rev. 219>>
AVK Blog
Re[8]: ResourceManager
От: Аноним  
Дата: 02.11.04 12:21
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, <Аноним>, Вы писали:


AVK>>>А как ты представляешь себе один раз задать для сервера? У него на каждый вызов отдельный поток заводится.


А>>Пишу в сессию название культуры и в HttpApplication.PreRequestHandlerExecute ставлю потоку UICulture.


AVK>Разбирайся в своем коде, ResourceManager работает нормально. Вот специально попробовал:

AVK>
AVK>ResourceManager rm = new ResourceManager("RMTest.Resource1", GetType().Assembly);
AVK>textBox1.AppendText(rm.GetString("Test"));
AVK>Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru");
AVK>textBox1.AppendText(rm.GetString("Test"));
AVK>

AVK>Выводятся разные строки.

Это потому что у тебя 1 поток, я же сказал.
Re[9]: ResourceManager
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.04 12:26
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Это потому что у тебя 1 поток, я же сказал.


А сколько надо?
... << RSDN@Home 1.1.4 beta 3 rev. 219>>
AVK Blog
Re[10]: ResourceManager
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 02.11.04 12:35
Оценка:
AVK>А сколько надо?

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

namespace RMTest
{
    class RMTest
    {
        static void Main()
        {
            for (int i = 0; i < 10; i++)
            {
                Thread t = new Thread(new ThreadStart(ThreadProc));
                t.Start();
                Thread.Sleep(500);
            }

            Console.Read();
        }

        private static void ThreadProc()
        {
            ResourceManager rm = new ResourceManager("RMTest.Resource1", typeof (RMTest).Assembly);
            if (new Random(Environment.TickCount).Next(2) == 1)
                Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru");
            Console.WriteLine(rm.GetString("Test"));
        }
    }
}


Выводятся разные строки. Опять не пойдет?

P.S. Мой тебе совет — не ищи ошибок в фреймворке, особенно в столь часто используемых классах, ищи ошибки у себя в коде.
... << RSDN@Home 1.1.4 beta 3 rev. 219>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.