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

DTI*_*att 13 c# string globalization localization internationalization

我正在尝试向用户显示以下行的消息:

"无法添加用户5"

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

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

Console.Write("User " + userNum + " could not be added");
Run Code Online (Sandbox Code Playgroud)

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

Ode*_*ded 13

你不能直接这样做.

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

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

Console.Write(string.Format("User {0} could not be added", userNum));
Run Code Online (Sandbox Code Playgroud)

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

User 5 could not be added
Run Code Online (Sandbox Code Playgroud)

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


Jas*_*rue 9

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

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

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

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

  • 您是否可以进一步了解如何将"loc注释添加到资源ID"?或者提供一个阅读更多的链接?谢谢!:) (2认同)

Aus*_*nen 6

像这样使用复合格式:

Console.Write("User {0} could not be added", userNum);
Run Code Online (Sandbox Code Playgroud)

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