Как отловить момент resource fallback?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Как отловить момент resource fallback? Expand / Collapse
Автор
Сообщение
26.05.2006 17:36


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047, Visits: 33 391
Представим себе, что наше приложение имеет neutral culture = en-US, и не имеет сателлитной сборки для de-DE (ну забыли выложить). Если мы выполним:

   My.Application.ChangeUICulture("de-DE")

то VB просто сделает fallback к нашей neutral culture - и никаких эксепшенов! Теперь если выполнить:

   MsgBox(My.Application.UICulture)

- то мы увидим "de-DE", хотя наш GUI будет на American English!

Я никак не могу найти способа отловить момент, когда происходит этот самый resource fallback. Было бы здорово в этот момент не тупо сваливаться на нейтральную культуру, а послать серверу приложений запрос вида "Дай-ка ты мне сателлитную DLL'ку с культурой de-DE".

Есть идеи?


While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
Сообщ. #897613
26.05.2006 18:37
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Метод ChangeUICulture состоит из одной простой строки - Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName) - поэтому никакого исключения и не будет. Fallback на культуру по умолчанию происходит где-то внутри менджера ресурсов, который тоже не выдает исключения, что в общем-то логично.

На MSDN удалось вот такую статью найти - Walkthrough: Downloading Satellite Assemblies on Demand with the ClickOnce Deployment API Using the Designer.

Если это не подойдет, то можно попробовать "втупую" проверять наличие файла сателитной сборки перед сменой культуры или ввести в файл ресурсов еще и название культуры и проверять совпадает ли текущая культура со значением считанным из ресурсов.

Сообщ. #897616
26.05.2006 21:17


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047, Visits: 33 391
Спасибо. Я тут тоже время не терял :) и вот что получилось:

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Dim rm As New System.Resources.ResourceManager(Me.GetType)
  Dim ci As New System.Globalization.CultureInfo("de-DE")
  Dim rt As System.Resources.ResourceSet = rm.GetResourceSet(ci, False, False)
  If rt Is Nothing Then
     MsgBox("Could not find satellite assembly for UICulture = de-DE")
  End If
  rt.Dispose()
End Sub

 




While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
Сообщ. #897630
27.05.2006 9:43
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Молодца :)

Предлагаю только переписать код используя блок using:

Dim rm As New System.Resources.ResourceManager(Me.GetType)
Dim ci As New System.Globalization.CultureInfo("de-DE")
Using rt As System.Resources.ResourceSet = rm.GetResourceSet(ci, False, False)
 If rt Is Nothing Then
  MsgBox("Could not find satellite assembly for UICulture = de-DE")
 End If
End Using
Сообщ. #897631
27.05.2006 12:39


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 13.12.2007 18:51
Сообщ.: 3 047, Visits: 33 391
Угу.


While (!Life.EOF) { You.Money ++; You.Girls.Add(new Girl(90,60,90)); BeHappy(); }
Сообщ. #897636
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 4:16