WPF 中的多语言[关闭]

2024-02-09

您能推荐一种为 WPF 应用程序实现多语言系统的好方法吗?我现在使用的方法涉及 XML、类和 xaml 扩展。它在大多数情况下工作得很好,但是当我必须处理动态标签或动态文本时,它需要一些额外的努力。我想让程序员只处理主要问题,而忘记语言问题。


按着这些次序:

1)全部放置String片段在单独的资源文件中。

例子:StringResources.xaml:

<ResourceDictionary 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">

    <!-- String resource that can be localized -->
    <system:String x:Key="All_Vehicles">All Vehicles</system:String>

</ResourceDictionary>

2)为每种语言制作副本并将其添加(翻译)到合并的词典中。不要忘记添加该国家/地区的 ISO 代码以使事情变得更容易。

Example App.xaml:

<Application x:Class="WpfStringTables.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="Window1.xaml">
    <Application.Resources>
        <ResourceDictionary >
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="StringResources.de-DE.xaml" />
                <ResourceDictionary Source="StringResources.nl-NL.xaml" />
                <ResourceDictionary Source="StringResources.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

最后一个带有字符串的资源文件将用于替换代码中的文本部分。

3a)使用来自的文本部分String table:

Example Window1.xaml:

<Window x:Class="WpfStringTables.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
    <Grid>
        <Button Margin="51,82,108,129" Name="AllVehiclesButton" 
                Content="{StaticResource All_Vehicles}"/>
    </Grid>
</Window>

3b)从代码加载资源(仅当您不想通过设置时才使用此代码XAML):

void PageLoad()
{
  string str = FindResource("All_Vehicles").ToString();
}

4)在应用程序开始时切换到新的文化:

代码片段来自App.xaml.cs:

public static void SelectCulture(string culture)    
{      
    if (String.IsNullOrEmpty(culture))
        return;

    //Copy all MergedDictionarys into a auxiliar list.
    var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();

    //Search for the specified culture.     
    string requestedCulture = string.Format("StringResources.{0}.xaml", culture);
    var resourceDictionary = dictionaryList.
        FirstOrDefault(d => d.Source.OriginalString == requestedCulture);

    if (resourceDictionary == null)
    {
        //If not found, select our default language.             
        requestedCulture = "StringResources.xaml";
        resourceDictionary = dictionaryList.
            FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
    }

    //If we have the requested resource, remove it from the list and place at the end.     
    //Then this language will be our string table to use.      
    if (resourceDictionary != null)
    {
        Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
        Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
    }

    //Inform the threads of the new culture.     
    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);

}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 中的多语言[关闭] 的相关文章

  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • 在哪里可以找到 WPF 应用程序中 UI 的一些主题/演示?

    我想使用 xaml 中的 Visual Studio Designer 设计一个现代外观的 UI 它为我提供了一个很好的工具箱 我可以使用它通过拖放来直观地创建 UI 由于它几乎表现得像 HTML 我想知道它是否也有丰富的主题库 我找到了一
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • WPF画布性能-children.add调用多次

    我在长画布上绘制了很多线条 想想条形图 并对其性能进行了相当好的调整 使用低级几何类并冻结它们等 这极大地提高了性能 但仍然需要几秒钟将几千个项目加载到画布中 我对应用程序进行了性能分析 看起来每次调用都花费了很大一部分时间canvas c
  • 当其他列子项折叠时调整 WPF 网格列的大小?

    我有两个控件Grid 并且需要制作一个来填充所有Grid另一个获得后的空间Collapseded 我不知道什么Container我可以使用吗 我试过了StackPanel and DockPanel我也是 但找不到好的解决方案 这是我的代码
  • 绑定导致 StackOverflow

    我不确定我在这里做错了什么 可以说 我有两个用户控件BoxAand BoxB 两者都有一个名为的 DependencyPropertyText BoxB 包装了具有常规 TextBox 的 BoxA 绑定应该像这样 BoxB Text Bo
  • silverlight/xaml 中通知的图标徽章覆盖

    我的 silverlight 应用程序中有一个功能区栏 并且在其中一个图标上我希望有一个徽章图标 显示该图标激活的视图中的项目数 想象一下 OS X 中显示未读邮件数量的邮件图标或 IOS 应用程序图标上的通知计数器 我对 xaml 样式不
  • 如何将文本放在 RadioButton 的顶部

    我正在尝试实现附件中显示的效果 但没有成功 甚至有可能吗 我试图将文本框放在单选按钮内 并将其设置为水平和垂直内容对齐 但它没有按我想要的方式工作 欢迎任何建议 Resource
  • WPF DataGrid 验证/绑定模式错误

    我创建了一个非常简单的新项目 仅测试 Microsoft WPF DataGrid 行为 不涉及其他 我只使用标准的 DataGrid
  • 如何从WPF中的数据网格中获取单元格的值? [复制]

    这个问题在这里已经有答案了 可能的重复 从 DataGrid 中选择 DataGridCell https stackoverflow com questions 9978119 select datagridcell from datag
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • 如何修复圆角按钮中边框和背景之间的空白?

    我为我的 WPF 应用程序创建了一个简单的按钮模板
  • 在后台进程中访问 WPF FlowDocument

    在后台访问 WPF FlowDocument 我的问题涉及在 WPF 后台访问 UI 对象 我见过几十个示例应用程序 它们都很简单 易于理解 其中 95 告诉你如何显示进度条 这并不是我想要的 我的问题是这样的 我想通过访问 RichTex
  • 如何销毁或分离 CollectionView

    我观察到 WPF ItemsControls 的奇怪行为 如果将 ItemsSource 设置为实现INotifyCollectionChanged然后设置ItemsSource为空 则CollectionView创建它是为了向 Items
  • 如何识别 WPF 文本框中的 ValidationError 工具提示位置

    我添加了一个箭头来指示工具提示中的文本框 当文本框远离屏幕边缘时 这非常有效 但是当它靠近屏幕边缘时 工具提示位置发生变化 箭头显示在左侧 Here is the Image Correct as expected since TextBo
  • 依赖属性回调不起作用

    我有以下代码 private static readonly DependencyProperty IDProperty DependencyProperty Register ID typeof int typeof DetailData
  • WPF .exe - 大文件大小

    我正在开发一个 WPF 应用程序 发现 exe 大小超过 1 2MB 我想减少最终可执行文件的大小 代码不过200kb 我在项目中使用了一些 png图片 总共占用了20kb左右 为什么最终的可执行文件这么大 我使用 ILDASM 统计信息来
  • WPF 在菜单上选择项目或在视图模型中获取命令参数

    我正在寻找几个小时来解决一个简单的问题 我想在我的菜单项上使用 SelectedItem 但经过几个小时的 stackoverflow 我发现这是不可能的 我发现了很多关于 CommandParameter 的信息 但我不明白它是如何工作的
  • 将快捷键分配给 WPF 中的按钮

    如何为WPF中的按钮分配快捷键 谷歌搜索给了我答案 即在标准 Winforms 中附加 而不是 所以在我完成以下操作后
  • WPF:将布尔值显示为“是”/“否”

    我有一个布尔值 需要在 TextBlock 中显示为 是 或 否 我尝试使用 StringFormat 执行此操作 但我的 StringFormat 被忽略并且 TextBlock 显示 True 或 False

随机推荐

  • 如何判断虚拟地址在 ARM Linux 内核中是否具有有效映射?

    我想检查是否可以在不引发分段错误的情况下取消引用虚拟地址 我所说的虚拟地址不仅仅是不可信的用户空间地址 我也想检查内核虚拟地址 在 x86 Linux 内核中 可以使用 virt addr valid 函数来检查是否 虚拟地址具有有效的映射
  • std::launder 可用于将对象指针转换为其封闭数组指针吗?

    当前的标准草案 大概是 C 17 说 基本 化合物 4 http eel is c draft basic compound 4 注意 数组对象及其第一个元素不可进行指针互换 即使它们具有相同的地址 尾注 所以指向对象的指针不能reinte
  • 对 UTF-8 字符串进行排序?

    我的 std strings 以 UTF 8 编码 因此 std string 不切掉的地方是重音符号 出现在 z 后面 但它不应该出现在 z 后面 Thanks 如果您不需要字典顺序 这就是按字典顺序对 UTF 8 编码字符串进行排序的结
  • appsettings.json 文件不在 .net core 控制台项目中

    据我所知 net core 已将 app config 文件替换为 appsetting json 然而 这个文件似乎只是为 ASP net 项目添加的 事实上 它甚至在添加项目列表中不可用 我发现this https blog bitsc
  • 如何检测工作站锁

    我正在开发一个应用程序 并试图检测工作站何时被锁定 例如用户按下 Windows L 键 我知道锁定事件具有价值 WTS SESSION LOCK 0x7 但我不知道如何使用它 我在网上搜索过但一无所获 您应该使用SystemEvents
  • Rails - 带条件的 text_field 类

    我想根据条件给出一个 text field 类 有没有办法在 Rails 中做到这一点 I e 仅当发生某种情况时 我才需要 必需 该类 使用三元 condition then else 操作员 阅读起来并不
  • VS 2015:性能向导中禁用分析工具

    我想对应用程序的性能进行采样 但在尝试使用性能向导启动新的分析会话时 各种工具 例如 CPU 使用率和应用程序时间轴 不可用 我使用的是 Visual Studio 2015 专业版 该应用程序使用 ASP NET 5 RC1 并从 Kes
  • 自定义 Json(反)序列化?

    我正在将一些代码从 Net 移植到 python 有时 我们需要将任意复杂的 json 从一种格式转换为另一种格式 Eg Query Boolean Operator And Parameters Equal Name Bob Boolea
  • 打印 RDLC 报告而不显示 ReportViewer 控件

    我想知道是否可以发送 打印数据DataGridView直接到 rdlc 报告而不将其绑定到ReportViewercontrol 有许多关于将 dgv 数据绑定到报告查看器控件的线程 我不想创建另一个带有报表查看器控件的表单 而是使用带有数
  • 具有默认值的 readline

    我可以使用以下命令将用户输入限制为 5 个字符GNU 阅读线 https cnswww cns cwru edu php chet readline rltop html include
  • Angular 2+ 错误:找不到名称“gapi”

    基本上 当我调用 google Analytics api 获取核心报告数据时 我收到以下错误 它可以在我的本地主机服务器上运行 但是当我尝试部署该应用程序时 它对我来说失败了 请告知如何在 angular2 中导入 gapi 变量 非常感
  • Angular:如何将字符串发送到注入服务?

    我创建了 CRUD 任务的通用服务 该服务通过 DI 依赖注入 使用 HttpClient 但我需要在服务的构造函数中通知另一个值 如何实现 因为当我在类的构造函数中定义将使用 DI 使用 CRUD 服务时 无法将参数传递给构造函数 下面是
  • 对数字中的数字求和的最快方法

    给定一个很大的数字 例如9223372036854775807 Int64 MaxValue 对数字求和的最快方法是什么 目前我正在 ToStringing 并将每个字符重新解析为int num ToString Sum c gt int
  • scala 解析器组合器 stackoverflow 递归

    以下代码示例在解析深度嵌套在括号中的表达式时由于堆栈溢出而崩溃 解析器组合器是标准库的一部分 有没有办法利用图书馆来避免这种情况 我不是在问它崩溃的原因 而是在问处理标准库的正确方法 解析 1 1 code import scala uti
  • 连接到另一个小部件的事件

    这很可能是一个重复的问题 但我必须问它 因为其他答案对我的情况没有帮助 因为我是 pyqt 的新手 几天前从 tkinter 切换过来 我想知道是否可以连接到这样的小部件的事件 self lineEdit QtGui QLineEdit s
  • 使用socket.io将数据从flash发送到node.js服务器

    我在node js中有一个简单的基于socket io的服务器 它监听端口81中的套接字 例如 我在用 Javascript 编写的客户端之间连接和传递数据没有问题 但经过多次尝试后 我无法让我的 Flash 应用程序连接到服务器并向其传递
  • Yii2 --- PHP 注意 'yii\base\ErrorException' 并显示消息 'unserialize(): 偏移量 8189 of 8192 字节时出错'

    PHP Notice yii base ErrorException with message unserialize Error at offset 8189 of 8192 bytes in C xampp htdocs final a
  • ImageView 中带圆角的位图

    我有一个 ImageView 我想用它来制作它rounded corners 我用这个
  • 如何在我们的应用程序中打开短信设置Activity?

    在下面的代码中我只能打开撰写短信 我想在不按下选项菜单的情况下打开短信设置活动 String SMS MIME TYPE vnd android dir mms sms Intent defineIntent new Intent Inte
  • WPF 中的多语言[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 您能推荐一种为 WPF 应用程序实现多语言系统的好方法吗 我现在使用的方法涉及 XML 类和 xaml 扩展 它在大多数情况下工作得很