如何在代码隐藏中使用 wpflocalizeextension?

How to use wpflocalizeextension in Code-Behind?

如何在 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");

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

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

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"));

我经常使用以下本机命令并且还没有遇到任何错误:

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

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

mcy 的回答起初以某种方式起作用,但后来我得到了空值。

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

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

简单使用

Properties.Resources.yourKey