1

总而言之,我最近学习了很多关于本地化和资源文件 (.resx) 的使用。对于特定代码,我为每个 WinForm 有一个 .resx(以及相关的本地化版本 .de-DE.resx 等),两个用于代码(一个用于对象字符串 [列名等],一个用于用户消息 [那些显示在消息框等])。对于对象字符串,我没有任何问题,但是对于消息,我有以下问题......

以消息“搜索“SomeString”(3 个文件中的 23 个命中)”为例,消息开头的制表符在哪里。要创建这样的消息,我使用类似的代码

String.Format("\tSearch \"{0}\" ({1} hits in {2} files)\n",
              strSearchString,
              nTotalHits,
              nNumberOfFiles);

现在的问题是,当我在资源文件中包含字符串时"\tSearch \"{0}\" ({1} hits in {2} files)\n",我在运行时得到以下输出

\tSearch \"SomeString\" (23 hits in 3 files)\n

显然,它没有像 C# 本身那样对待字符串文字。我知道要在资源​​文件中创建新行,我必须使用Shift+ Return,但是你对 tabs 等做了什么?请不要说复制到 Word 或 Notepad++ 并添加选项卡,然后复制回来,否则我会戳自己的眼睛。

将资源文件中包含的字符串文字转换为C# 正确解释的实际字符串文字的最佳方法是什么?

请注意,这种转换只会发生在消息中,所以我什至愿意考虑运行时转换。

谢谢你的时间。

4

1 回答 1

5

恐怕你会戳到自己的眼睛,因为这正是你必须做的。我也对此感到沮丧。

您可以将选项卡作为单独的项目包括在内,如下所示:

String.Format("{0}Search \"{1}\" ({2} hits in {3} files)\n",
          "\t",
          strSearchString,
          nTotalHits,
          nNumberOfFiles);

您也可以在数字键盘上键入 Alt-012 以进入选项卡。

string.Replace("\\t", "\t")最后,您可以通过在将字符串传递给string.Format()并将“\t”放入字符串资源之前自己“转义”选项卡。

这一切有点不满意!(而且我相信你自己已经想到了所有这些想法......)

于 2013-03-21T10:38:36.330 回答