c# - 希伯来语字符串与数字的连接结果顺序错误

标签 c# string hebrew

我试图从我的语言文件中提取一个字符串并在执行期间包含一个变量。问题是,根据语言的不同,变量的位置会有所不同。就希伯来语而言,似乎不可能将变量放在末尾。由于我是从资源文件中提取字符串,因此我无法使用字符串插值。 请参阅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 格式。如果我将生成的行复制/粘贴到文本板中,则第二行会有所不同。

最佳答案

正如 @Avi 在他的 post 中所述:

"The unicode characters "RTL mark" (U+200F) and "LTR mark" (U+200E) were created precisely for this purpose."

引用: -https://learn.microsoft.com/en-us/globalization/input/text-rendering#directionality-control-marks

代码可以更新如下:

string heText1 = "פני התחלת הישיבה שלך time";
string timePattern1 = "time";
Console.WriteLine(heText1.Replace(timePattern1,"\u200e" +DateTime.Now.ToString("dd/MM/yyyy")));

fiddle code .

注意:我仍然无法在资源文件中存储具有 {0} 模式的希伯来语字符串,并且不得不接受使用巨大的 {time} 模式并进行替换。

关于c# - 希伯来语字符串与数字的连接结果顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58786733/

相关文章:

c++ - 如何从 fstream 中准确读取 128 个字节到字符串对象中?

javascript - phonegap-cordova - javascript,字符串的希伯来语值未正确编码

wpf - 使用 WPF(C#) 日历控件,希伯来语和格鲁吉亚日期转换

C#:基于非零的数组不符合 CLS

c# - 识别数组中未使用过的索引

perl - Perl 字符串是不可变的吗?

Java:使用新的模式字母扩展 SimpleDateFormat

c# - 检查字符串是否包含数值

c# - .NET framework 中位标志的实际使用

java - NumberFormatException 给定一个包含小整数的输入字符串