簡體   English   中英

將 locbaml 與資源字典一起使用

[英]Using locbaml with resource dictionaries

我目前正在努力解決本地化方面的一些特殊情況。 我閱讀了本地化 WPF 應用程序的不同方法,並決定使用由“locbaml”生成的附屬程序集。 為了能夠從 c#-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");

確實如此。 當我啟動應用程序時,我可以看到“開發”。 我的示例項目只有兩個文本塊。 一個 TextBlock 的 TextProperty 綁定到一個名為“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 添加到項目文件(以及 assemblyinfo)
2.創建uid:msbuild /t:updateuid LocalizationIssue.csproj
3.創建csv文件:locbaml /parse LocalizationIssue.resources.dll /out:loc.csv
4. 翻譯 loc.csv 中的值
5. 創建衛星:locbaml /generate LocalizationIssue.resources.dll /trans:loc.csv /out:c:\\ /cul:en-US
現在,當我將 UI 文化切換為法語時,它仍然顯示帶有綁定的 TextBlock 的英文翻譯,但顯示其他文本塊的本地化值。
任何想法我做錯了什么? 您對“locbaml”方法的體驗如何? 我們應該采用 resx 文件的傳統方式嗎?

感謝您的任何輸入;)

嘗試復制到一個新文件可能是 loc_us.csv 並進行更改然后運行 ​​locbaml /generate LocalizationIssue.resources.dll /trans:loc_us.csv /out:c:\\ /cul:en-US

我知道這是舊的,但希望這會節省一些時間。

我遵循了相同的步驟並得到了與 CrazyChief 的原始帖子中詳述的相同的結果。 我錯過的步驟是像這樣將 xml:lang="en-US" 添加到我的資源字典中

<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"
                    xml:lang="en-US">
    <!-- String resources that can be localized -->
    <system:String x:Uid="system:String_1" x:Key="success">Success</system:String>
</ResourceDictionary>

在我進行此更改並重建項目后,我能夠使用 locBAML 從 en-US 衛星程序集導出 CSV,進行翻譯,並從中生成 fr-CA 衛星程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM