【发布时间】:2024-01-14 12:55:01
【问题描述】:
目前我主要通过将键值对放入Resources.resw 文件来进行本地化。所以我想知道我应该如何本地化需要格式化的字符串或用不同的语言说出具有不同语法顺序的字符串。下面的例子可能更容易理解我的意思。
例如,正如 official document 中用于本地化的这部分所暗示的那样,一种语言的日期格式可以是
string.Format("Every {0} {1}", monthName, dayNumber);
其他用途
string.Format("Every {1} {0}", monthName, dayNumber);
在这种情况下,本地化这样一个字符串的最佳方法是什么?
事物/语法可能比这个例子复杂得多。 official document 中的建议对我来说并不好,因为日期可能无法预测。或者您可以枚举日期,但这需要大量工作。或者假设我们有一个接受用户输入的字符串,比如
string.Format("Do you want to delete {name}?", name);
在另一种语言中,它可能具有这种语法顺序
string.Format("You want to delete {name} do?", name);
不可能按照文档中的示例对整个句子进行本地化。
我能想到的唯一避免这种情况的方法是不要输入用户输入......
【问题讨论】:
-
我真的不明白你的问题。为什么不能使用字符串
Do you want to delete {0}?表示英语而Möchten Sie {0} entfernen?表示德语? -
@Dirk 我没有拒绝那个选项。我主要在
Resources.resw文件中进行本地化。我只是想知道这个问题是否仍然可以使用它来解决,或者我必须在 csharp 代码中解决。 -
如果您想要一种更好的方法来指示哪种参数在哪个位置,您将不得不推出自己的解决方案。您可以根据需要使其简单(按原样使用 string.format)或复杂(处理复数和结尾差异,根据参数值替换单词等)。