【发布时间】:2019-11-10 07:56:00
【问题描述】:
我正在尝试从我的语言文件中提取一个字符串并在执行期间包含一个变量。问题在于,根据语言,变量的位置会有所不同。在希伯来语的情况下,似乎不可能将变量放在末尾。由于我从资源文件中提取字符串,因此我无法使用字符串插值。 见video 有什么提示吗?
我正在使用的代码是:
// the {0} should be positioned at the end of the Hebrew string
<data name="BeforeStartingYourMeeting" xml:space="preserve">
<value>{0}פני התחלת הישיבה שלך</value>
</data>
我稍后会尝试通过以下方式在代码中使用该字符串:
string timeLeft = appointment.Start.Subtract(DateTime.Now).TotalMinutes + " min";
string timeBeforeMeetingLabel = string.Format(Properties.Resources.BeforeStartingYourMeeting, timeLeft);
我已阅读:
这个案例正是描述了我的问题:
想到了以下解决方法,但我最终遇到了同样的问题:
<data name="BeforeStartingYourMeeting" xml:space="preserve">
<value>פני התחלת הישיבה שלך {time}</value>
</data>
代码here 清楚地表明了问题所在。不同的输入字符串但相同的输出!!!看起来它与必须采用特定 RTL 格式的字符串的显示有关。如果我将生成的行复制/粘贴到文本板中,则第二行不同。
【问题讨论】:
-
"好像不可能把变量放在最后"为什么?
-
希伯来语(显然是所有 RTL 语言)的问题通常是像“{”这样的符号被视为 LTR 字符,而希伯来语是 RTL(从右到左)。因此它将
string.Format中的符号“{}”移动到一些无效位置(主要是在字符串的末尾),然后引发异常。要了解您的具体问题,我们需要了解有关该问题的更多信息,请提供您正在使用的数据示例并使用无效的字符串插值进行编码 -
@styx 它将变量移动到字符串中的其他位置。很可能是由于Fabjan指出的原因
-
@Fabjan 感谢您的解释,这是有道理的。我已经用代码更新了帖子。
-
您的代码应该可以工作,自己检查一下:dotnetfiddle.net/8kPRvA 确保您的格式字符串中没有隐藏字符。尝试将您的字符串复制到测量字符串长度的工具并确保您看到正确的数字