首页 > 解决方案 > 使用 string.Format 进行本地化

问题描述

目前我主要通过将键值对放入Resources.resw文件来进行本地化。所以我想知道我应该如何本地化需要格式化的字符串或用不同的语言说出具有不同语法顺序的字符串。通过下面的示例可能更容易理解我的意思。

例如,正如本地化官方文档中的这部分所建议的那样,一种语言可以具有以下日期格式

string.Format("Every {0} {1}", monthName, dayNumber);

而其他用途

string.Format("Every {1} {0}", monthName, dayNumber);

在这种情况下,本地化此类字符串的最佳方法是什么?

事物/语法可能比这个例子复杂得多。官方文档中的建议对我来说看起来不太好,因为日期可能无法预测。或者您可以枚举日期,但这需要大量工作。或者假设我们有一个接受用户输入的字符串,比如

 string.Format("Do you want to delete {name}?", name);

在另一种语言中,它可能具有这种语法顺序

string.Format("You want to delete {name} do?", name);

不可能像文档中所建议的那样对整个句子进行本地化。

我能想到的避免情况的唯一方法是不要输入用户输入....

标签: c#uwp

解决方案


如果您有权访问日期,则可以使用The Month ("M", "m") 格式说明符

从文档中:

DateTime date1 = new DateTime(2008, 4, 10, 6, 30, 0);
Console.WriteLine(date1.ToString("m", 
                  CultureInfo.CreateSpecificCulture("en-us")));
// Displays April 10                        
Console.WriteLine(date1.ToString("m", 
                  CultureInfo.CreateSpecificCulture("ms-MY")));
// Displays 10 April

因为string.Format("Do you want to delete {name}?", name);你可以

$"Do you want to delete the following user? '{name}'";

推荐阅读