使用String.Format避免资源(可本地化的字符串)重复

时间:2010-06-10 16:22:36

标签: .net localization resources string-formatting

我正在开发一个应用程序(.NET,但不相关),因为资源/字符串重复的可能性很大 - 大多数字符串都很简单:

  • 卷:33
  • 体积:33(dB)
  • 33 dB
  • 体积(dB)
  • 命令 - 体积: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)

像“User”vs“User:”vs“User - ”这样的简单案例怎么样?你能想到任何文化,其中':'会在不同的地方,或者可能会使用不同的角色吗?

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

使用这种方法有任何隐患吗?有人能给我一个例子(语言/文化)吗?这样做不正常吗?

2 个答案:

答案 0 :(得分:2)

当您提出问题时,您已经确定了主要缺点:

  

有人可以给我一个例子(语言)吗?这样做不正常吗?

您依赖于所有语言中相同单词的顺序。无论如何我都不是语言专家,但是我已经研究过将其翻译成其他语言(通常是法语和德语)的应用程序以及构建字符串时的单词顺序总是一个问题。

你可能对简单的短语 - 例如你提供的短语,但是更复杂的东西,你需要为每个短语分别拥有资源。

答案 1 :(得分:1)

除了复数/单数问题(这不是特定于这个问题)之外,我认为这对于大多数欧洲语言是安全的,因为它不使用自由文本,而主要是数量和上诉:例如命令:命令的名称。体积:数量。 您需要处理单词顺序,拥有资源定义的模板,但这仍然只是“格式类型”的一个资源 - 模板中的单词仍然是参数化的。

即便如此,我也会使用默认使用合成方法的策略来实现它,但是可以选择覆盖特定语言,以便可以在默认组合规则出现故障的情况下明确指定字符串。