2009-06-08 79 views
20

对于我目前使用的项目,我必须将特殊格式的字符串传送给第三方服务进行处理。所以我建立起来的字符串,像这样:我们应该在资源中存储格式字符串吗?

string someString = string.Format("{0}{1}{2}: Some message. Some percentage: {3}%", token1, token2, token3, number); 

而是然后硬编码字符串,我想将它移入项目资源:

string someString = string.Format(Properties.Resources.SomeString, token1, token2, token3, number); 

第二个选项是在我看来, ,不像第一个那样可读,即阅读代码的人将不得不拉起字符串资源来确定最终结果应该是什么样子。

我该如何解决这个问题?在这种情况下,硬编码格式字符串是必要的恶意吗?

回答

14

我确实认为这是一个必要的恶习,我经常使用。臭东西,我要做的,就是:

// "{0}{1}{2}: Some message. Some percentage: {3}%" 
string someString = string.Format(Properties.Resources.SomeString 
            ,token1, token2, token3, number); 

..at至少直到代码足够稳定,我可能会尴尬具有被别人看到。

+5

你也应该的方式向资源文件添加注释以说明参数是什么。如果文件涉及翻译,这对本地化人员非常有用。 – 2009-06-08 02:45:43

+0

@CodingMonkey:同意。尽可能让本地化工程师的生活变得轻松。你不需要翻译猜测。 – 2009-06-08 02:52:22

+1

@MichaelPetrotta>你如何稳定代码,以便这些{0}字符串不再需要?我个人认为不使用`string.Format`,而是使用:`“begin {middle} end”.Replace(“{middle}”,middle)``。当然,这种方法有其自身的问题... – Laoujin 2013-11-22 18:38:08

2

我不明白为什么在程序中包括格式字符串是一件坏事。与传统的无证幻数不同,它乍一看很明显。当然,如果你在多个地方使用格式字符串,它肯定应该存储在适当的只读变量中以避免冗余。

我同意将它保留在资源中是不必要的间接。如果您的程序需要本地化,并且您正在通过资源文件进行本地化,则可能出现异常。

15

有几个原因可能会导致您这样做,但唯一的原因是如果您要将应用程序本地化为另一种语言。

如果您使用的资源字符串有几件事要记住。

  1. 尽可能在您希望本地化的资源字符串集合中包含格式字符串。这将允许翻译人员对格式化项目的位置进行重新排序,以使其在翻译文本的上下文中更好地适应。

  2. 避免在您的语言中使用格式标记中的字符串。这些数字最好使用 。例如,该消息:

    “指定的值必须是{0}和{1}之间”

    是巨大的,如果{0}和{1}被像图5和10号如果格式化在像“五”和“十”这样的字符串中,这会使本地化变得困难。

  3. 通过简单地命名您的资源,您就可以了解您正在讨论的可读性问题。

    string someString = string.Format(Properties.Resources.IntegerRangeError,minValue,maxValue);

  4. 评估您是否在代码中的正确抽象级别生成用户可见字符串。一般而言,我倾向于尽可能将代码中所有用户可见的字符串分组到最接近用户界面的代码中。如果某些低级别的文件I/O代码需要提供错误,则应该使用您在应用程序中处理的异常和一致性错误消息来执行此操作。这也将整合所有需要本地化的字符串,而不是让它们贯穿整个代码。

1

是你可以 enter image description here

新的,让我们看看这将如何

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i]) 

每次

给了我动力消息后,我期运用ResXManager

相关问题