C# 如何在不同语言可能有不同语法的情况下统一本地化字符串

C# 如何在不同语言可能有不同语法的情况下统一本地化字符串,c#,string,unity3d,translation,string-concatenation,C#,String,Unity3d,Translation,String Concatenation,我在翻译一个Unity游戏,有些台词是这样的 在XXXX解锁 其中“XXXX”在运行时被任意子字符串替换。替换通配符很容易,但要翻译引号,我不能简单地连接a+b,因为某些语言的值在字符串之前或内部。我想我需要有效地去替换它(隔离并保留子字符串并翻译它周围的任何内容) 问题是,虽然我可以轻松地完成第二部分,但我想不出任何方法来完成第一部分。我知道如何获取我要查找的字符索引,但该值占用任意数量的字符,并且我不能使用空格,因为某些语言不使用它。无法使用数字检测,因为并非所有值都是数字。我试着问谷歌,但

我在翻译一个Unity游戏,有些台词是这样的

在XXXX解锁

其中“XXXX”在运行时被任意子字符串替换。替换通配符很容易,但要翻译引号,我不能简单地连接a+b,因为某些语言的值在字符串之前或内部。我想我需要有效地去替换它(隔离并保留子字符串并翻译它周围的任何内容)

问题是,虽然我可以轻松地完成第二部分,但我想不出任何方法来完成第一部分。我知道如何获取我要查找的字符索引,但该值占用任意数量的字符,并且我不能使用空格,因为某些语言不使用它。无法使用数字检测,因为并非所有值都是数字。我试着问谷歌,但我无法将“查找任何替换通配符的内容”转换为可搜索的关键字

简而言之,我要寻找的是一种找到“XXXX”(简单部分)的方法,然后在字符串中找到替换它的内容(不太容易的部分)


提前谢谢。

多亏了大家的善意建议,我终于找到了解决办法。我存储了子字符串,并用一种特殊的转换方法引用它,该方法确实接受一个值。谢谢大家的帮助

public static string TranslateWithValue (string text, string value, int language) {
    string sauce = text.Replace (value, "XXXX");
    sauce = Translate (sauce, language);
    sauce = sauce.Replace ("XXXX", value);
    return sauce;
}

在这种情况下,我通常使用string.Format。在您的情况下,我将声明2个可本地化字符串:

string unlockFormat=“在{0}解锁”;
字符串unlockValue=“下一级”;
当您需要显示解锁条件时,您可以组合如下字符串:

string unlockCondition=string.Format(unlockFormat,unlockValue);
这将生成字符串“在下一级解锁”


unlockFormat和unlockValue都可以翻译,翻译器可以在需要的地方移动{0}。

如果逐字翻译整个字符串,并确保翻译也包含XXXX,会怎么样?然后用译文代替原文,然后做替换?在字符串替换完成后翻译字符串将更加困难。请发布您的代码,这将为我们提供一个开始的地方…这是我一开始尝试做的,但由于Unity将成为Unity,我发现我必须在文本可见时翻译文本。到目前为止,我还没有得到任何代码,因为我无法得到任何东西来坚持。当然XXXX是一个变量??你不能在{myvar}处执行$“Unlock at{myvar}”,其中myvar是已翻译的详细信息吗?这就是发生的情况,但我的翻译方法只将完成的文本作为输入。我确实认为我可以创建另一个方法,将值作为次要参数,因此我将尝试。您应该使用值列表或值字典,而不是单个字符串。我从您的回答中推断,文本中的关键字不是您在问题中描述的
XXXX
?否则,你为什么要先替换呢?不管它值多少钱,它实际上是“XXXX”。我使用字符串文件,所以它实际上可以是任何东西。