15

我正在尝试按照以下方式向用户显示一条消息:

“无法添加用户 5”

但是如何将变量添加到放置在 .resx 文件中的字符串中?我一直在尝试搜索诸如“本地化中的变量”“带变量的全球化”等内容,但结果很枯燥。

如果我不进行本地化,我会写:

Console.Write("User " + userNum + " could not be added");

资源如何实现?

4

5 回答 5

15

你不能直接这样做。

可以做的是放置一个标记 - 一个可以用变量值替换的特定字符串。string.Replace

一个很好的候选者是内置的字符串格式:

Console.Write(string.Format("User {0} could not be added", userNum));

假设userNum有 value 5,结果将是:

User 5 could not be added

您可以使用复合格式说明符本地化此字符串。

于 2012-06-08T20:41:41.160 回答
11

在我完成国际化的团队中,我们通常还为格式字符串创建一个资源,例如 USER_COULD_NOT_BE_ADDED_FORMAT,并通过将该资源的值作为格式模式传递来调用 String.Format(或您的环境的等效项)。

然后你会做Console.Write(String.Format(resourceManager.GetString("USER_COULD_NOT_BE_ADDED_FORMAT"), userNum));

大多数本地化人员要么接受过他们正在本地化的系统使用的格式字符串的培训,要么在您提供给他们的本地化工具包中获得指导。因此,例如,这并不像让他们直接修改代码那样高的障碍。

一般需要在资源 ID 后面加上 loc 注释来说明位置参数。

于 2012-06-08T20:42:54.760 回答
6

像这样使用复合格式

Console.Write("User {0} could not be added", userNum);

这样你就可以本地化"User {0} could not be added".

于 2012-06-08T20:42:24.790 回答
4

你可以做到这很简单 在此处输入图像描述

新的让我们看看如何

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

这每次都会给我动态信息

顺便说一句,我正在使用ResXManager

于 2016-09-21T17:41:41.677 回答
3

我会使用 string.Format

http://msdn.microsoft.com/en-us/library/system.string.format.aspx

Console.Write(string.Format("User {0} could not be added", userNum));
于 2012-06-08T20:43:44.433 回答