【问题标题】:How to include Variables in Localized Strings?如何在本地化字符串中包含变量?
【发布时间】:2012-06-12 22:07:25
【问题描述】:

我正在尝试向用户显示一条消息:

“无法添加用户 5”

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

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

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

如何利用资源实现这一点?

【问题讨论】:

  • 无论如何,您都不应该使用 + 构造/打印字符串。 String.Format 使用起来更容易......
  • 在大多数情况下优于 String.Format:var myString = $"Put {myVariable} here.";

标签: c# string localization internationalization globalization


【解决方案1】:

你不能直接这样做。

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

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

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

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

User 5 could not be added

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

【讨论】:

    【解决方案2】:

    在我完成国际化的团队中,我们通常还为格式字符串创建一个资源,例如 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”?或者给我一个链接来阅读更多?谢谢! :)
    • 另外,虽然我有你在这里,因为你似乎有这些事情的经验,最好是为给定项目中的所有字符串提供一个单一的 resx 文件,还是分开更好将它们放入多个 resx 文件中,例如,每个表单一个? (我的 resx 文件本身存储在一个单独的全球化项目中)
    • 假设您使用的是 .resx 格式,本地化注释只是 resx 编辑器 UI 中的“注释”,或者在 <value> 元素之后的 xml 中的 <comment>
    • 我建议使用多个 resx 文件,但更多的是为了源代码管理的完整性。通常您会创建一个打包的 .zip 文件(或类似文件)以发送给本地化人员,并且不应该为多个文件的灵活性增加任何成本。
    • 如果想要做类似的事情,但是直接在cshtml文件上应用时,可以这样做:@String.Format(@Localizer["USER_COULD_NOT_BE_ADDED_FORMAT"].Value, userNum)
    【解决方案3】:

    像这样使用Composite Formatting

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

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

    【讨论】:

      【解决方案4】:

      你可以做到,很简单

      新的让我们看看如何

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

      这每次都会给我动态消息

      顺便说一句,我使用的是ResXManager

      【讨论】:

        【解决方案5】:

        我会使用 string.Format

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

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

        【讨论】:

          猜你喜欢
          • 2023-03-27
          • 1970-01-01
          • 2015-11-30
          • 2023-03-04
          • 2020-05-22
          • 2023-03-30
          • 2022-11-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多