Мне немного сложно предоставить локализованные строки для пользовательского интерфейса в небольшом приложении 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.
Что не так?