Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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#_.net_Wpf_Localization_Resources - Fatal编程技术网

C# 在WPF应用程序中支持自定义用户词汇表/标签

C# 在WPF应用程序中支持自定义用户词汇表/标签,c#,.net,wpf,localization,resources,C#,.net,Wpf,Localization,Resources,在我正在开发的应用程序中,相同的软件包服务于许多行业,这些行业对于本质上相同的东西有不同的词汇表。该应用程序是一个C#服务器,WPF桌面应用程序向其发出基于套接字的XML请求 例如,一些客户可能称某件东西为“商品”,一些客户称之为“零件”,或者一些客户称之为“SKU” 目标是应用程序能够根据我们为用户创建的“词汇表”设置重新标记自己。通常,给定客户的词汇在整个应用程序中只会相差5-25个单词/短语。这些自定义词汇表是特定于/由客户创建的,不会与主应用程序发行版一起保存 我最初的想法是使用Cust

在我正在开发的应用程序中,相同的软件包服务于许多行业,这些行业对于本质上相同的东西有不同的词汇表。该应用程序是一个C#服务器,WPF桌面应用程序向其发出基于套接字的XML请求

例如,一些客户可能称某件东西为“商品”,一些客户称之为“零件”,或者一些客户称之为“SKU”

目标是应用程序能够根据我们为用户创建的“词汇表”设置重新标记自己。通常,给定客户的词汇在整个应用程序中只会相差5-25个单词/短语。这些自定义词汇表是特定于/由客户创建的,不会与主应用程序发行版一起保存

我最初的想法是使用CustomCultureInfo(例如“Acme”公司的“en AC”),提供与该资源文件中的基本en US不同的值

en-AC.resx资源可以保存在服务器上,由服务器加载,还可以传输以加载到WPF客户端应用程序

到目前为止,这个问题似乎是ResourceManager没有正确地为自定义区域性a'la选择字符串,而我还没有能够解决这个问题。此外,由于应用程序是ClickOnce部署的,我们可能没有注册新文化的权限

我的下一个想法是,由于要修改的短语数量非常少,所以在运行时替换资源值,但这似乎也有点不确定,四处搜索

所以,我想我会征求社区对如何处理这个问题的建议


对建议和想法持开放态度…

因为这仅仅是几个字,我想我会通过命名约定来做到这一点。假设您定义了字符串键“MyCompany”。您通常通过以下方式访问:

string myString1 = Properties.Resource.MyCompany;
但也可以通过这种方式访问:

string myString2 = Properties.Resource.ResourceManager.GetString ("MyCompany")
这是完全相同的(但是将字符串作为标识符处理——这有点容易出错)。您现在可以做的是首先检查一个特殊的名称,您可以将其语法化为“MyCompany_AC”。缺点是每个字符串都需要自己的包装器:

    string MyCompany
    {
      get
      {
        string myString = Properties.Resource.ResourceManager.GetString ("MyCompany_" + theCompanyPostfix);

        if (myString == null)
        {
            myString = Properties.Resource.ResourceManager.GetString ("MyCompany");
        }

        return myString;
      }
    }