我没有为您的问题指出解决方案,但是我担心您的字符串格式:
您的示例的一个问题是使用 String.Format 进行翻译。
在某些语言中,“添加您的 {0}”部分将需要不同的措辞,具体取决于将插入 {0} 部分的内容。
一个例子:
“Add you horse”将翻译成丹麦语,变成“Tilføj din hest”,而“Add your donkey”将翻译成“Tilføj dit æsel”。如您所见,有一个区别:din/dit 无法从“添加您的 {0}”中正确翻译。德语等其他语言也是如此。
编辑:伪答案可能类似于:为每个主题添加更多字符串到每个 resx 文件(使用 AddYourItemHorse、AddYourItemRacecar 和 AddYourItemDonkey 等标识符)。或者创建像 PageName.Racecar.da-DK.resx 这样的资源文件,其中包含赛车主题的资源等等。然后,根据代码区域、主题和当前文化,您执行以下操作:
Dictionary<string, string> resourceDictionary = new Dictionary<string, string>();
private void fillDictionary(string path)
{
using (ResXResourceReader rxrr = new ResXResourceReader(path))
{
foreach (DictionaryEntry entry in rxrr)
{
//Fill the fillDictionary
}
}
}
然后通过将您想要的内容与代表主题的字符串连接来访问字典中的字符串:
string theme = "Racecar";
Label testLabel = new Label();
testLabel.Text = resourceDictionary[AddYourItem + theme];
或者,您可以拥有一个资源文件 pr。区域、语言和主题,例如:MainForm.Racecar.da-DK.resx,然后构建传递给 fillDictionary 的路径,如下所示:
string languageCode = Thread.CurrentThread.CurrentCulture.Name;
string path = "MainForm." + theme + "." + llanguageCode + ".resx";
并将路径传递给fillDictionary-method。
请注意,上述代码未经测试。我只是从我的脑海中写到这里。但它应该为您指明可能的(不一定是最佳的)解决方案的方向。
您可以在此处阅读有关 ResXResourceReader 的更多信息:Working with .resx Files Programmatically