Использование locbaml со словарями ресурсов

1

В настоящее время я борюсь с каким-то особым случаем в локализации. Я читал о различных подходах к локализации приложения WPF и решил пойти со спутниковыми сборками, созданными "locbaml". Чтобы иметь возможность локализовать строки из С# -code, я решил использовать ресурсные словари, как описано здесь: http://msdn.microsoft.com/en-us/library/bb613547%28v=vs.110%29.aspx
Итак, у меня есть этот словарь ресурсов:

<ResourceDictionary x:Uid="ResourceDictionary_1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:system="clr-namespace:System;assembly=mscorlib">
    <system:String x:Uid="system:String_1" x:Key="TestKey">Development</system:String>
</ResourceDictionary>

Я объединять его в app.xaml:

Application x:Uid="Application_1" x:Class="LocalizationIssue.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary x:Uid="ResourceDictionary_1">
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary x:Uid="ResourceDictionary_2" Source="Localization.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

Это должно позволить мне сделать что-то вроде этого:

this.Message = (string)Application.Current.FindResource("TestKey");

И это так. Когда я запускаю приложение, я вижу "Разработка". Мой образец проекта имеет только два текстовых блока. TextProperty одного TextBlock привязан к свойству, называемому "Message". Другой устанавливается статически на "StaticDevelopment". Итак, MainWindow.xaml выглядит так:

<Window x:Uid="Window_1" x:Class="LocalizationIssue.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel x:Uid="StackPanel_1">
        <TextBlock x:Uid="TextBlock_1" FontSize="20" Text="{Binding Message}" VerticalAlignment="Center" HorizontalAlignment="Center" />
        <TextBlock x:Uid="TextBlock_2" FontSize="20" Text="StaticDevelopment" VerticalAlignment="Center" HorizontalAlignment="Center" />
    </StackPanel>
</Window>

Затем я выполнил все шаги для создания спутниковых сборок с помощью locbaml, как описано здесь: http://msdn.microsoft.com/en-us/library/ms746621%28v=vs.110%29.aspx
т.е.: 1. Добавьте UICulture в файл проекта (а также в сборкуinfo)
2. Создайте uids: msbuild/t: updateuid LocalizationIssue.csproj
3. Создайте csv файл: locbaml/parse LocalizationIssue.resources.dll/out:loc.csv
4. Перевести значения в loc.csv
5. Создайте sattelites: locbaml/generate LocalizationIssue.resources.dll/trans:loc.csv/out: c: \/cul: ru-US
Теперь, когда я переключу культуру пользовательского интерфейса на французский, он по-прежнему показывает английский перевод TextBlock со связыванием, но локализованное значение для другого текстового блока.
Любые идеи, что я делаю неправильно? Каков ваш опыт работы с "locbaml" -approach? Должны ли мы пойти традиционным способом с resx файлами?

Спасибо за любой вклад;)

Теги:
xaml
wpf
localization

1 ответ

0

Попробовать копирование в новый файл может быть loc_us.csv и внести изменения, затем запустите locbaml/generate LocalizationIssue.resources.dll/trans:loc_us.csv/out: c: \/cul: ru-US

Ещё вопросы

Сообщество Overcoder
Наверх
Меню