C#键值默认为键

C#键值默认为键,c#,list,translation,key-value,expandoobject,C#,List,Translation,Key Value,Expandoobject,:) 我正在寻找几个月前在一个项目中看到的东西。我不知道他们使用什么,我非常想知道它是如何工作的,但我不知道如何搜索它。。。我现在要在6个小时内找到它。。你能帮我提高知识水平吗D 数据库: |id |key |en |fr | |1 |TheNameOfTheKey |Hello |Bonjour | |2 |TheNameOfTheKey2|Hello2 |Bonjour2 | 代码:

:)

我正在寻找几个月前在一个项目中看到的东西。我不知道他们使用什么,我非常想知道它是如何工作的,但我不知道如何搜索它。。。我现在要在6个小时内找到它。。你能帮我提高知识水平吗D

数据库:

|id |key             |en          |fr           |
|1  |TheNameOfTheKey |Hello       |Bonjour      |
|2  |TheNameOfTheKey2|Hello2      |Bonjour2     |
代码:

String s1 = Singleton.Instance.Translation.TheNameOfTheKey
String s2 = Singleton.Instance.Translation.TheNameOfTheKey2

// this key don't exist in Db but return his name instead
String s3 = Singleton.Instance.Translation.AnotherKeyNotInDb 

// Results
// s1 = "Hello"
// s2 = "Hello2"
// s3 = "AnotherKeyNotInDb"
我的问题是:

  • 翻译的类型是什么?如果你有文档,我会看的

  • 看起来像我要找的东西是:ExpandoObject


  • 提前谢谢你

    您可以使用
    资源文件
    它的工作原理类似于词典,取决于您的本地化程度,您将加载适当的资源文件

    Whare
    strings
    是一个
    strings.resx
    文件

    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
    Console.WriteLine(Properties.strings.Hello);
    
    详情请参阅


    您可以使用
    资源文件
    它的工作原理类似于词典,取决于您的本地化程度,您将加载适当的资源文件

    Whare
    strings
    是一个
    strings.resx
    文件

    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
    Console.WriteLine(Properties.strings.Hello);
    
    详情请参阅


    如果要存储在数据库中,最好将语言保留为列。我会将它们保留为行:

    |Id|Key             |Language|Translation|
    |1 |TheNameOfTheKey |en      |Hello      |
    |2 |TheNameOfTheKey |fr      |Bonjour    |
    

    索引键和语言列,您将获得非常快速的查询结果。这是数据库的优势。:)

    如果要存储在数据库中,最好将语言保留为列。我会将它们保留为行:

    |Id|Key             |Language|Translation|
    |1 |TheNameOfTheKey |en      |Hello      |
    |2 |TheNameOfTheKey |fr      |Bonjour    |
    

    索引键和语言列,您将获得非常快速的查询结果。这是数据库的优势。:)

    这看起来像某种全球化解决方案。你可能想在上面搜索。1。如果数据库中没有与查询匹配的键,则返回的代码中可能指定了一个默认值。2.ExpandoObject只是一个对象,其成员可以在运行时动态添加/删除/更改。我看不出它与你的问题有什么联系。我想你要找的是我在寻找ASP全球化,但它与我过去使用的不同。我不懂这个语法。。MyObject.NameOfKey返回值或其名称
    Singleton.Instance.Translation
    可能是扩展了DynamicObject并覆盖了
    TryGetMember()
    ,并检查给定的名称(在代码中,您将其视为属性,但实际上它作为
    binder.name
    传递给了binder中的TryGetMember())作为密钥存在于数据库中。如果密钥不存在,则返回密钥名。这看起来像某种全球化解决方案。你可能想在上面搜索。1。如果数据库中没有与查询匹配的键,则返回的代码中可能指定了一个默认值。2.ExpandoObject只是一个对象,其成员可以在运行时动态添加/删除/更改。我看不出它与你的问题有什么联系。我想你要找的是我在寻找ASP全球化,但它与我过去使用的不同。我不懂这个语法。。MyObject.NameOfKey返回值或其名称
    Singleton.Instance.Translation
    可能是扩展了DynamicObject并覆盖了
    TryGetMember()
    ,并检查给定的名称(在代码中,您将其视为属性,但实际上它作为
    binder.name
    传递给了binder中的TryGetMember())作为密钥存在于数据库中。如果键不存在,它将返回键名。对于sur,但使用一行键和值更容易翻译。我们可以轻松地检查多个翻译之间的差异。对于sur,我们比较多个翻译需要更少的努力,但是使用一行键和值更容易翻译。我们可以轻松地检查多个翻译之间的差异。我们需要更少的努力来比较多重翻译。