2010-06-10 77 views
2

我正在处理资源/字符串重复的潜力巨大的应用程序(.NET,但不相关) - 大多数这些字符串很简单,如:避免与String.Format的资源(本地化的字符串)重复

  • 体积:33
  • 卷:33(分贝)
  • 33分贝
  • 体积(分贝)
  • 命令 - 体积:33(dB)的

其中X,Y和单位相同。

我应该定义新的资源为每个字符串的或者是优选使用的String.Format简化其中的一些,例如:

String.Format("{0}: {1}", Resource.Volume, 33) 
String.Format("{0}: {1} {2}", Resource.Volume, 33, Resource.dB) 
Resource.Volume 
String.Format("{0} ({1})", 33, Resource.dB) 
String.Format("{0} ({1})", Resource.Volume, Resource.dB) 
String.Format("Command - {0}: {1} {2}", Resource.Volume, 33, Resource.dB) 

我还要定义串的格式,如“{0 }:{1}”中的资源,所以会有的重新排序的话可能...

我会和 - 选择性不使用这种方法在整个应用程序..

又有怎样:

String.Format("{0}: {1}", Volume, Resource.Muted_Volume) 
// = Volume: Muted 
Resource.Muted_Volume 
String.Format("{0}: {1} (by user {2})", Volume, Resource.Muted_Volume, "xy") 
// = Volume: Muted (by user xy) 

那么像“用户”与“用户:”与“用户 - ”这样的简单例子呢?你能想到任何文化:':'会在不同的地方,或者会使用不同的角色?

优点是在我的应用程序中将资源数量减少2-3倍。

使用这种方法有没有隐藏的危险?有人能给我一个例子(语言/文化),这将无法正常工作?

回答

2

你已经确定的主要缺点自己,当你问一个问题:

可能有人给我一个例子(语言),这些都不会正常工作?

您所依赖的单词在所有语言中的顺序相同。我不是任何语言专家,但是我一直致力于编译字符串时翻译成其他语言(通常是法语和德语)和词序的应用程序始终是一个问题。

对于简单的短语你可能会确定 - 例如你给的那些,但是更复杂的东西,你需要为每一个单独的资源。

+1

我还会定义资源行NameValue =“{0}:{1}”和NameValueUnit =“{0}:{1}({1})”,这样就可以对单词进行重新排序 – 2010-06-10 16:35:33

1

除了复数/单数问题(这不是特定于这个问题),我认为这对大多数欧洲语言来说是安全的,因为它没有使用自由文本,但主要是数量和附录。命令:命令的名称。体积:数量。 您需要处理单词顺序,让资源定义模板,但这仍然只是“格式类型”的一个资源 - 模板中的单词仍然是参数化的。即使如此,我仍会使用默认情况下使用组合方法的策略来实现它,但是可以选择覆盖特定语言,以便可以在缺省组合规则出现故障时明确指定字符串。