2013-12-17 5 views
0

Извините, за мой английский мой первый пост. У меня странная проблема с RESX, поддерживаемая культура в Silverlight. Его приложение silverlight с 1 веб-проектом (asp.net), в котором запускается приложение silverlight, 1 главный проект (silverlight, sl.Application) и другие, которые используются в качестве модулей (silverlight) в главном проекте (экран разработчика решений: http://i.imgur.com/A4sHWRI.png?1). Sl.Application могут вызывать другие проекты и использовать ихние взгляды как часть основного обзора находится в sl.applicationРесурсы Вопрос о культуре в Silverlight 5

Я пытался добавить различные культуры, так:

добавить в мое приложение Поддерживаемые культуры EN и CS к каждый cs.proj.

<SupportedCultures>pl;en;cs;de;ru;cz;sk</SupportedCultures> 

Моя нейтральная культура установлена ​​в PL в информации о сборке в каждом проекте.

[assembly: NeutralResourcesLanguageAttribute("pl-PL")] 

Создание Resx файлов для различных культур, здесь Fol PL, EN, CS: http://i.imgur.com/P6woiV2.png

При запуске приложения вы можете выбрать, какие культуры вы хотите, нажав на флажок. Сначала давайте начнем с PL - его нейтральной культуры, поэтому мне не нужно ничего менять. Использование

var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 

var test_en = Resources.DrivesBook.ResourceManager.GetString("AdresArrival", culture); 

Я проверил, что культура устанавливается на PL и ресурса (DriveBook.resx) вернуть правильную строку в PL

Следующая: Попытаемся EN, Start приложения, выберите EN флаг - изменить культуру ан -GB.

System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-GB"); 

Используя тот же код, как описано выше, возвращает мне EN строку так его все еще хорошо

Лучшее начинается, когда я пытался использовать CS. же, как и выше, я выбираю CS флаг - изменение культуры в CS-CZ Использование в SL.Application

var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 

его возвращает меня CS-CZ культуры, поэтому я думал, что будет хорошо, когда я называю

var test_cs = Resources.DrivesBook.ResourceManager.GetString("AdresArrival", culture); 

Он возвращает мне строку из CS-культуры, но все работает отлично, итак где проблема?

Когда я попробовал то же самое в других проектах (от общего или модулей папки), вот магия :)

То же, что и выше Использование в Modules.Auxiliary

var culture = System.Threading.Thread.CurrentThread.CurrentUICulture; 

еще хорошо, мы получили CS -CZ культура, кажется, работает хорошо, но

var test_cs = Resources.DrivesBook.ResourceManager.GetString("AdresArrival", culture); 

он возвращает мне строку из PL культуры, а не из CS

Сумма: Смена культуры отлично работает, для EN все приложение получило строку EN из файлов resx, но когда я перехожу на CS, только SL.Application может разрешить * .cs.resx файл, другие проекты выглядят так, как будто они не имеют видели файлы * .cs.resx.Добавляя En и CS, я точно так же работаю для обоих, и EN работает нормально, но CS нет. существует ли там какое-либо свойство в cs.proj, которое ограничивает максимальные поддерживаемые культуры в текущем проекте, или вы знаете, что я сделал неправильно?

ответ

0

ОК, я решил это самостоятельно Проблема была в моей пользовательской структуре, которая отвечала за дифференциальные загрузочные ресурсы. Разрешение DLL только через имя файла, не включая filePath (здесь папка cs, en для разных культур) вызвала перезапись файлов в зависимости от лексического порядка, поэтому CS.resx был загружен во-первых, но позже я загружаю ресурс EN и перезаписываю cs.resx. Эта структура начинает работать, когда приходит загрузка основной xap. Основной проект проекта, потому что он был загружен ранее, например. для загрузки экрана, поэтому resource.cs.resx был загружен, когда моя инфраструктура не могла его испортить