3

Мне немного сложно предоставить локализованные строки для пользовательского интерфейса в небольшом приложении Silverlight 4. В основном я положил папку "Ресурсы" и помещены два файла ресурсов в нем:Использование встроенных ресурсов в Silverlight (4) - другие культуры не скомпилированы

Statuses.resx 
Statuses.ro.resx 

У меня есть перечисление Статусы:

public enum Statuses 
{ 
    None, 
    Working 
} 

и конвертора:

public class StatusToMessage : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (!Enum.IsDefined(typeof(Status), value)) 
     { 
      throw new ArgumentOutOfRangeException("value"); 
     } 
     var x = Statuses.None; 
     return Statuses.ResourceManager.GetString(((Status)value).ToString(), Thread.CurrentThread.CurrentUICulture); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

в поле зрения у меня есть текстовый блок:

<TextBlock Grid.Column="3" Text="{Binding Status, Converter={StaticResource StatusToMessage}}" /> 

При представлении рендеринга конвертер вызывается, но независимо от того, какой параметр Thread.CurrentThread.CurrentUICulture установлен, он всегда возвращает значение культуры по умолчанию.

При дальнейшей проверке я разделил полученный файл XAP, взял полученный DLL-файл в Reflector и проверил встроенные ресурсы. Он содержит только ресурс по умолчанию!

Возвращаясь к двум файлам ресурсов я теперь инспектирующих их свойства:

сборки действий: Embedded Resource Копировать в выходной каталог: Не копировать Выборочная инструмент: ResXFileCodeGenerator пользовательского пространства имен инструмент: [пусто]

Оба файла ресурсов (.resx) имеют следующие настройки. В .Designer.cs результате файлы следующим образом:

Statuses.Designer.cs:

//------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by a tool. 
//  Runtime Version:4.0.30319.1 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
//------------------------------------------------------------------------------ 

namespace SilverlightApplication5.Resources { 
    using System; 


    /// <summary> 
    /// A strongly-typed resource class, for looking up localized strings, etc. 
    /// </summary> 
    // This class was auto-generated by the StronglyTypedResourceBuilder 
    // class via a tool like ResGen or Visual Studio. 
    // To add or remove a member, edit your .ResX file then rerun ResGen 
    // with the /str option, or rebuild your VS project. 
    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 
    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 
    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 
    internal class Statuses { 

// ... yadda-yadda 

Statuses.ro.Designer.cs

[пусто]

Я принял оба файла и помещают их в консольное приложение, и они ведут себя так, как ожидалось в нем, а не в этом приложении silverlight.

Что не так?

ответ

6

Оказывается, вам просто нужно сделать еще один оттенок. Как MSDN article говорит:

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

В обозревателе решений щелкните правой кнопкой мыши имя проекта и выберите команду Изменить.

Файл проекта открывается в Visual Studio Studio XML Editor.

В файле проект, добавить имена регион-нейтральный и конкретную культуры, чья спутник сборка ваше приложение создано для < SupportedCultures > тегов. Если ваше приложение поддерживает несколько культур , используйте их точки с запятой (;) до . Этот список культур не должен включать вашу культуру по умолчанию . Для Например, < SupportedCultures > тег для приложения, по умолчанию которого культура является английским ("EN") и который поддерживает английский - Соединенные Штаты Америки ("EN-US"), французских ("FR") , французский - Франция ("FR-FR"), Россия ("р"), и русский - Россия ("р-RU") культура может выглядеть следующим образом:

<SupportedCultures>en-US;fr;fr-FR;ru;ru-RU;</SupportedCultures>

так , помните, чтобы f! @ # ingly вручную редактировать проект fi le и указать, какие культуры включать в компиляцию.

В настоящее время это работает: D

 Смежные вопросы

  • Нет связанных вопросов^_^