Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中的本地化_C#_Wpf - Fatal编程技术网

C# WPF中的本地化

C# WPF中的本地化,c#,wpf,C#,Wpf,我正在阅读WPF中的一本书,该书提供了一种为本地化目的创建应用程序的方法。他的建议与我的建议相同: 1) 编辑项目文件.csproj并添加元素en US以创建包含en US本地化嵌入baml的本地化程序集。当我编译项目时,它创建了包含en US本地化嵌入baml的子文件夹en US。我将其备份 2) 我对fr做了同样的操作,并为其创建了一个备份 3) 接下来,我将创建的两个子文件夹放在名为en-US和fr-fr的应用程序文件夹中 这本书建议,如果我将区域性设置更改为fr fr(通过控制面板区域设

我正在阅读WPF中的一本书,该书提供了一种为本地化目的创建应用程序的方法。他的建议与我的建议相同:

1) 编辑项目文件.csproj并添加元素en US以创建包含en US本地化嵌入baml的本地化程序集。当我编译项目时,它创建了包含en US本地化嵌入baml的子文件夹en US。我将其备份

2) 我对fr做了同样的操作,并为其创建了一个备份

3) 接下来,我将创建的两个子文件夹放在名为en-US和fr-fr的应用程序文件夹中

这本书建议,如果我将区域性设置更改为fr fr(通过控制面板区域设置),将使用fr-fr本地化组件。
但是,我发现,无论是什么文化,它都在使用en-US文化。我知道这一点,因为我将区域性更改为fr,并删除了fr文件夹,但仍然是应用程序。正在运行,当en-US one被删除时,它会抛出一个异常

有人能澄清我哪里做错了/理解错了吗

以下是这本书的文字:
准备本地化应用程序
下一步是为您的项目启用本地化支持。这只需要一个 更改您需要将以下元素添加到项目的.csproj文件中 在第一个元素中:
en US
这会告诉编译器应用程序的默认区域性是美国英语(obvi) 当然,如果合适的话,你可以选择其他东西)。进行此更改后,构建过程将更改。下次编译应用程序时,您将得到一个名为en US的子文件夹。该文件夹中有一个附属程序集,其名称与应用程序和扩展名.resources.dll相同(例如,LocalizableApplication.resources.dll)。
此程序集包含应用程序的所有已编译BAML资源,这些资源以前存储在主应用程序集中。
现在,当您运行此应用程序时,公共语言运行库(CLR)将自动 根据计算机的区域设置在正确的目录中查找附属程序集,并加载正确的本地化资源。例如,如果您在fr区域性中运行,CLR将查找fr子目录并使用在那里找到的附属程序集。
这意味着,如果要向本地化应用程序添加对更多区域性的支持,只需添加更多子文件夹和附属程序集,而不会干扰原始应用程序可执行文件。
当CLR开始探测附属程序集时,它遵循一些简单的规则 优先级:
1.首先,它检查可用的最具体的目录。这意味着它将查找针对当前语言和区域的附属程序集(如fr)。
2.如果找不到此目录,它将查找针对当前语言(如fr)的附属程序集。

3.如果找不到此目录,将引发IOException异常

NET中的资源管理器使用CurrentUICulture标志来决定加载哪个本地化程序集,而不是CurrentCulture标志。CurrentUICulture表示正在运行的Windows版本的本机语言,而CurrentCulture表示通过控制面板设置的当前区域设置

考虑这一点的另一种方式是,应用程序可以询问用户两个独立的问题:

1) 他说什么语言?(当前文化)

2) 他在哪里?(当前文化)

#1的答案应该说明用于显示UI元素的语言,即加载哪个本地化资源文件

#2的答案应该说明如何显示数字字符串和货币值等内容。这是通过将数字/货币转换为ToString方法中的字符串值来自动处理的

要再次检查这两个属性的值,可以执行以下操作:

        Console.WriteLine("CurrentCulture={0}, CurrentUICulture={1}", CultureInfo.CurrentCulture, CultureInfo.CurrentUICulture);
要更改CurrentCulture,您只需更改控制面板“区域和语言”格式中的位置

要更改CurrentUICulture,可以执行以下操作之一:

  • 在非英语版本的Windows上进行测试。(例如,在虚拟机中)
  • 使用
  • 为测试目的在代码中添加重写,通常基于.config文件设置,在该文件中显式设置CultureInfo.CurrentUICulture的值
基于app.config中的UICulture设置覆盖UICulture的示例如下所示。您需要将UICultureOverride设置为典型的区域性字符串,例如fr、de等

        // using System.Threading;
        // using System.Globalization;
        // using System.Configuration;
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(ConfigurationManager.AppSettings.Get("UICultureOverride"));