首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将locbaml与资源字典一起使用

将locbaml与资源字典一起使用
EN

Stack Overflow用户
提问于 2014-10-07 20:23:26
回答 2查看 309关注 0票数 1

我目前正在为本地化中的一些特殊情况而努力。我读到了本地化WPF应用程序的不同方法,并决定使用由"locbaml“生成的附属程序集。为了能够从c#代码本地化字符串,我决定使用资源字典,如下所述:http://msdn.microsoft.com/en-us/library/bb613547%28v=vs.110%29.aspx

所以我有这个资源字典:

代码语言:javascript
复制
<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中:

代码语言:javascript
复制
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>

这应该使我能够做这样的事情:

代码语言:javascript
复制
this.Message = (string)Application.Current.FindResource("TestKey");

事实的确如此。当我启动应用程序时,我可以看到“开发”。我的样例项目只有两个Textblock。一个消息的TextProperty被绑定到一个称为“TextBlock”的属性上。另一个静态设置为"StaticDevelopment“。所以MainWindow.xaml看起来是这样的:

代码语言:javascript
复制
<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中)

文件创建uids: msbuild LocalizationIssue.csproj

  • Create csv- /out:loc.csv

  • Translate:
  1. /t:updateuid /parse LocalizationIssue.resources.dll loc.csv
  2. Create sattelites: locbaml /generate LocalizationIssue.resources.dll /trans:loc.csv /out:c:\ /cul:en-US

现在,当我将UI区域性切换到法语时,它仍然显示带有绑定的TextBlock的英语翻译,但是其他textblock.Any的本地化值又有什么问题呢?你对"locbaml"-approach有什么经验?我们应该用传统的方式处理resx文件吗?

感谢您的意见;)

EN

回答 2

Stack Overflow用户

发布于 2018-02-23 23:16:34

尝试复制到可能是loc_us.csv的新文件并进行更改,然后运行locbaml /generate LocalizationIssue.resources.dll /trans:loc_us.csv /out:c:\ /cul:en-US

票数 0
EN

Stack Overflow用户

发布于 2021-07-29 19:28:52

我知道这是旧的,但希望这将节省一些人的时间。

我遵循了相同的步骤,并得到了与CrazyChief的原始帖子中详细描述的相同的结果。我遗漏的一步是将xml:lang="en-US“添加到我的资源字典中,如下所示

代码语言:javascript
复制
<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 satellite程序集导出CSV,进行转换,并从它生成fr-CA附属程序集。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26235912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档