这是我对本地化的第一次尝试,对它的了解越多,我就越困惑。老实说,我现在只是在寻找答案。所以这是我得到的错误:
未处理的异常:System.Resources.MissingManifestResourceException:找不到适合于指定区域性或中性区域性的任何资源。确保在编译时已将“ MeetnGreetSf.Resources.AppResources.resources”正确嵌入或链接到程序集“ MeetnGreetSf”中,或者确保所需的所有附属程序集均已加载并完全签名。发生
这是课程:
public class TranslateHelper
{
readonly CultureInfo ci;
private string ResourceId = "MeetnGreetSf.Resources.AppResources";
private ResourceManager resmgr;
private CultureInfo cui = new CultureInfo("es-ES");
public TranslateHelper()
{
//ResourceId += "." + cui.Name;
resmgr = new ResourceManager(ResourceId, typeof(AppResource).GetTypeInfo().Assembly);
}
public string Translate(string Name)
{
var translation = resmgr.GetString(Name, ci);
return translation;
}
}
我认为由于某种原因我将其关闭,而不是将.resources附加到文件中。
在此先感谢您的帮助。
忘了包括如何使用翻译类。
public Colors()
{
colorInfo = new ObservableCollection<ColorType>();
t = new TranslateHelper();
this.GenerateColors();
}
private void GenerateColors()
{
colorInfo.Add(new ColorType(t.Translate("Aqua"), Color.Aqua));
colorInfo.Add(new ColorType(t.Translate("Black"), Color.Black));
colorInfo.Add(new ColorType(t.Translate("Blue"), Color.Blue));
colorInfo.Add(new ColorType(t.Translate("Gray"), Color.Gray));
colorInfo.Add(new ColorType(t.Translate("Green"), Color.Green));
colorInfo.Add(new ColorType(t.Translate("Lime"), Color.Lime));
colorInfo.Add(new ColorType(t.Translate("Maroon"), Color.Maroon));
colorInfo.Add(new ColorType(t.Translate("Navy"), Color.Navy));
colorInfo.Add(new ColorType(t.Translate("Olive"), Color.Olive));
colorInfo.Add(new ColorType(t.Translate("Purple"), Color.Purple));
colorInfo.Add(new ColorType(t.Translate("Red"), Color.Red));
colorInfo.Add(new ColorType(t.Translate("Silver"), Color.Silver));
colorInfo.Add(new ColorType(t.Translate("Teal"), Color.Teal));
colorInfo.Add(new ColorType(t.Translate("White"), Color.White));
colorInfo.Add(new ColorType(t.Translate("Yellow"), Color.Yellow));
}
}
请注意,我是Visual Studio商业本地化工具的作者(出于全面披露的目的)。您应该研究“ System.Threading.Thread.CurrentThread.CurrentUICulture”,这通常是.NET中所有翻译所围绕的(用于处理本地化资源)。但是,如何处理它的机制可能会因项目类型而异。现在通常不需要您执行此操作的方式。通常比这要容易得多(不需要专用的类)。例如,这是一个简单的控制台应用程序的基本过程(同样,情况可能会因项目类型而异)。
如果该属性当前设置为系统默认值(除非您在代码中对其进行更改,否则通常会设置为默认值),那么您将从应用程序的主程序集获取“ MyString”的版本(默认语言资源存储在该位置)。但是,如果将代码中的“ CurrentUICulture”更改为“ es”(对于西班牙语),则系统将在文件“ es \ YourApp.resources.dll”(程序根目录下)中查找“ MyString”。如果找不到该文件夹(如果您不支持西班牙语,则该文件夹可能不存在),或更现实的是,“ MyString”在该(西班牙语)DLL中根本没有翻译,那么它将退回到应用程序的主程序集,因此您将再次获得默认的语言字符串。同样,这是一个简短的故事,但它涵盖了基本细节。它' 在MSFT的文档中通常称为“集线器和轮辐”模型(尽管有时会使用其他术语),它依赖于前面提到的“后备”过程。例如,如果将“ System.Threading.Thread.CurrentThread.CurrentUICulture”设置为“ es-AR”(在阿根廷使用西班牙语),则程序将在“ es-AR \ YourApp.resources”中查找“ MyString”。 dll”。如果没有找到(例如,您不支持“ es-AR”,那么就没有此类文件夹,或者根本就没有该字符串),那么它将“回退”到“ es”文件夹(已知作为中立文化,在这种情况下,系统认为仅是简单的西班牙语就是次佳的选择)。如果未找到(在“ es \ YourApp.resources.dll”中),则再次,系统将回退到主程序集中嵌入的默认语言字符串。研究所有这些内容,您会发现与现在相比,处理字符串是轻而易举的事。一切都会自动为您处理,包括回退情况(只需通过调整“ System.Threading.Thread.CurrentThread.CurrentUICulture”属性即可)-所有对任何强类型资源(例如“ Resources.MyString”)的引用都将以该属性的任何语言显示当前设置为)。希望对您有所帮助。一切都会自动为您处理,包括回退情况(只需通过调整“ System.Threading.Thread.CurrentThread.CurrentUICulture”属性即可)-所有对任何强类型资源(例如“ Resources.MyString”)的引用都将以该属性的任何语言显示当前设置为)。希望对您有所帮助。一切都会自动为您处理,包括回退情况(只需通过调整“ System.Threading.Thread.CurrentThread.CurrentUICulture”属性即可)-所有对任何强类型资源(例如“ Resources.MyString”)的引用都将以该属性的任何语言显示当前设置为)。希望对您有所帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句