如何在本地化字符串中包含变量?

时间:2012-06-08 20:40:13

标签: c# string localization internationalization globalization

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

“无法添加用户5”

但是如何将变量添加到放在.resx文件中的字符串?我正在尝试搜索诸如“本地化中的变量”“变量全球化”等内容,但是却出现了问题。

如果我没有本地化,我会写:

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

如何利用资源实现这一目标?

5 个答案:

答案 0 :(得分:13)

你不能直接这样做。

可以做的是放置一个令牌 - 一个特定的字符串,可以用string.Replace 替换,并带有变量的值。

这个的好选择是内置字符串格式:

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

假设userNum的值为5,结果为:

User 5 could not be added

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

答案 1 :(得分:9)

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

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

大多数本地化人员都要接受他们正在本地化的系统使用的格式字符串的培训,或者在您提供的本地化工具包中提供指导。因此,例如,这不是直接修改代码的障碍。

您通常需要在资源ID中添加loc注释来解释位置参数。

答案 2 :(得分:6)

像这样使用Composite Formatting

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

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

答案 3 :(得分:2)

我会使用string.Format

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

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

答案 4 :(得分:2)

你可以做到这一点很简单 Spring Validator implementation

new让我们看看如何

io.cadvisor.metric.prometheus

每次都会给我动态消息

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