如何在Code-Behind中使用wpflocalizeextension?

时间:2015-01-25 15:06:43

标签: c# wpf localization

如何在C#代码中使用wpflocalizeextension? 在xaml中,为了获取本地化字符串,我可以按如下方式使用它:

<Window x:Class="SomeClass"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:lex="http://wpflocalizeextension.codeplex.com"    
    lex:LocalizeDictionary.DesignCulture="uk-UA"    
   lex:ResxLocalizationProvider.DefaultAssembly="DesktopApp"    
   lex:ResxLocalizationProvider.DefaultDictionary="Resources">
   <Button Content="{lex:Loc SignInBtn}"/>

如何在代码中获取本地化字符串,例如MessageBox.Show("SignInBtn");

4 个答案:

答案 0 :(得分:11)

这很简单。 本地化密钥存储为 AssemblyName 资源 KeyName ,其中资源Resources类名称,通常您不会将其更改为其他名称。

您可以创建一个简单的包装器来获取本地化值:

using WPFLocalizeExtension.Extensions;

public static class LocalizationProvider
{
    public static T GetLocalizedValue<T>(string key)
    {
        return LocExtension.GetLocalizedValue<T>(Assembly.GetCallingAssembly().GetName().Name + ":Resources:" + key);
    }
}

假设您已使用"SignInBtn"密钥创建了字符串资源,则可以调用:

MessageBox.Show(LocalizationProvider.GetLocalizedValue<string>("SignInBtn"));

答案 1 :(得分:2)

我经常使用以下本机命令,但尚未遇到任何错误:

LocalizeDictionary.Instance.GetLocalizedObject("keyComesHere", null, LocalizeDictionary.Instance.Culture).ToString()

当然,在转换为字符串之前,您应该检查空值。

答案 2 :(得分:0)

mcy的回答最初起作用了,但后来我得到了空位。

我更愿意使用第3次重载来确保获得正确的资源:

LocalizeDictionary.Instance.GetLocalizedObject("AssemblyName", "DictionaryName", "Key", LocalizeDictionary.Instance.Culture);

答案 3 :(得分:0)

简单地使用它

  

Properties.Resources.yourKey