Локализация приложения Windows Phone 7

У меня есть небольшая проблема с получением файлов локализованных ресурсов для работы с Windows Phone 7. Вот что я делаю:

  • Создайте файл ресурсов, скажем, "Strings.resx" (Build Action: Compile)
  • Создайте ключ, скажем, "TestKey" со значением по умолчанию пустой строки
  • Добавить английский файл ресурсов в той же папке со значением "некоторая английская строка": Strings.en-us.resx(Build Action: Embedded Resource)
  • Добавить японский файл ресурсов в той же папке со значением "some Japanese string": Strings.ja-jp.resx(Build Action: Embedded Resource)

В моем приложении Silverlight, WPF Apps, который отлично работает при изменении Thread.CurrentThread.CurrentCulture. Но в телефоне я всегда получаю значение, которое в файле Strings.resx - пустая строка.

Я попытался использовать созданный конструктором код и вручную подключить диспетчер ресурсов, и это, похоже, не имеет значения. Здесь мой код:

            Type t = typeof(Strings);

            _resourceManager = new ResourceManager(
                t.Namespace + "." + t.Name,
                t.Assembly);

            _resourceManager.GetString("TestKey");

Скажите, что локализованные ресурсы поддерживаются на телефоне...; > Что я делаю неправильно? Спасибо!

Обновление: спасибо Olivier за пересылку ссылки. Я тоже это видел, но пропустил важный шаг. Я не добавил "SupportedCultures" node в свой csproj. Сделал всю разницу - надеясь, что кто-то еще не потеряет два часа, пытаясь понять это, как я.

<SupportedCultures>de-DE;es-ES;</SupportedCultures>

Ответ 1

Я написал сообщение в блоге, которое содержит ссылки на группу Руководства по глобализации/локализации для WP7. Существует Windows Phone 7 в 7 Учебное видео, которое помогло мне понять основы. После этого было просто вопрос, как сделать привязку данных:

В статье MSDN показано, как настроить файлы и создать Класс LocalizedStrings, но они тогда предположите, что вы знаете, как использовать это класс для привязки данных. Visual Studio 2010 и Silverlight обрабатывают данные привязка иначе, чем Winforms, и он становится еще более запутанным, поскольку XAML также имеет свое собственное определение Ресурсы, отличающиеся от Ресурсы .NET, которые мы только что создали. Silverlight также использует термин Ресурс для ссылки на файлы, которые используют действия по созданию "Контента", как эти файлы обернуты в .XAP файл, аналогичный тому, как файлы с Построить действие "Ресурса" встроенный в сборку .Dll(например: загрузка изображения из контента или файлы ресурсов). Я обнаружил, что вместо этого использования Text = "{Binding Path = resourceFile.resourceName, Источник = {StaticResource Localizedresources}}" Синтаксис XAML было проще использовать следующие шаги:

  • Откройте свою основную страницу XAML (обычно MainPage.xaml) в Visual Студийный дизайнер

  • Откройте свойства для PhoneApplicationPage и установите DataContext должен быть Application.Resources → LocalizedStrings. ПРИМЕЧАНИЕ: если вы уже используют объект DataContext, затем вы должны интегрировать Класс LocalizedStrings в объект, чтобы он имел локализацию поддержка.

  • После установки DataContext Pages вы можете изменить данные привязка для любого элемента управления на странице просто выбрав свойство (например: текст, флажок и т.д.), выбрав "Применить Data Binding..." и установление пути to Localizedresources.BtnText или независимо от названия желаемого значение ресурса.