C#键值默认为键
:) 我正在寻找几个月前在一个项目中看到的东西。我不知道他们使用什么,我非常想知道它是如何工作的,但我不知道如何搜索它。。。我现在要在6个小时内找到它。。你能帮我提高知识水平吗D 数据库: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 | 代码:
|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"
我的问题是:
提前谢谢你 您可以使用
资源文件
它的工作原理类似于词典,取决于您的本地化程度,您将加载适当的资源文件
Wharestrings
是一个strings.resx
文件
Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");
Console.WriteLine(Properties.strings.Hello);
详情请参阅
您可以使用
资源文件
它的工作原理类似于词典,取决于您的本地化程度,您将加载适当的资源文件
Wharestrings
是一个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,我们比较多个翻译需要更少的努力,但是使用一行键和值更容易翻译。我们可以轻松地检查多个翻译之间的差异。我们需要更少的努力来比较多重翻译。