我正在开发一个应用程序(.NET,但不相关),因为资源/字符串重复的可能性很大 - 大多数字符串都很简单:
其中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倍。
使用这种方法有任何隐患吗?有人能给我一个例子(语言/文化)吗?这样做不正常吗?
答案 0 :(得分:2)
当您提出问题时,您已经确定了主要缺点:
有人可以给我一个例子(语言)吗?这样做不正常吗?
您依赖于所有语言中相同单词的顺序。无论如何我都不是语言专家,但是我已经研究过将其翻译成其他语言(通常是法语和德语)的应用程序以及构建字符串时的单词顺序总是一个问题。
你可能对简单的短语 - 例如你提供的短语,但是更复杂的东西,你需要为每个短语分别拥有资源。
答案 1 :(得分:1)
除了复数/单数问题(这不是特定于这个问题)之外,我认为这对于大多数欧洲语言是安全的,因为它不使用自由文本,而主要是数量和上诉:例如命令:命令的名称。体积:数量。 您需要处理单词顺序,拥有资源定义的模板,但这仍然只是“格式类型”的一个资源 - 模板中的单词仍然是参数化的。
即便如此,我也会使用默认使用合成方法的策略来实现它,但是可以选择覆盖特定语言,以便可以在默认组合规则出现故障的情况下明确指定字符串。