代码之家  ›  专栏  ›  技术社区  ›  gehho

本地化:如何允许用户在不编译的情况下定义自定义资源?

  •  1
  • gehho  · 技术社区  · 14 年前

    在我们的应用程序中,我们有一个数据项集合,每个数据项都有一个 DisplayedName 财产。此属性应本地化,即应以用户选择的语言显示。因此,另一个财产, DisplayedNameResourceKey ,指定应由 显示名称 财产。

    在简化代码中,这意味着:

    public string DisplayedName
    {
        get
        {
            return MyResources.ResourceManager.GetObject(this.DisplayedNameResourceKey);
        }
    }
    
    public string DisplayedNameResourceKey
    {
        get;
        set;
    }
    

    现在,问题是:用户应该能够编辑这些项,包括 显示名称 ,或者更准确地说 显示的名称资源密钥 . 不仅如此,用户还应该能够以某种方式定义新的资源,然后他可以引用这些资源。也就是说,他可以从一组预定义的资源(一些常用的名称)中进行选择,也可以定义一个自定义资源,然后用户也需要对其进行本地化。

    但是,用户不能将自定义资源添加到 MyResources 在运行时不编译。因此,需要另一种方法。它不必是一种非常友好的方式(例如不需要用户界面),因为这通常由我们的服务工程师来完成。

    我正在考虑使用一个包含资源密钥对和相应翻译的txt或csv文件。在预定义的位置,每种语言都有一个单独的文件。但我对这个想法并不满意,因为它涉及到解决资源问题的大量工作。

    有人知道解决这种情况的好办法吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Eric Eijkelenboom    14 年前

    你可以考虑把资源放到数据库中。这样,您就可以保持它的动态性和快速性。

    例如,有三列的表:资源键、语言、消息。您可能应该在资源键和语言列上创建一个复合索引,以便快速查找。