这是我对本地化的第一次努力,我读的越多,我就越困惑。说实话,我只是在寻找答案。所以这是我得到的错误:
未处理的异常: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而不是.resx?
提前感谢您的帮助。
忘记包括翻译类的使用方式。
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));
}
}
答案 0 :(得分:1)
请注意,我是Visual Studio商业本地化工具的作者(为了完全披露)。您应该调查&#34; System.Threading.Thread.CurrentThread.CurrentUICulture&#34;这通常是.NET中所有翻译的内容(用于处理本地化资源)。但是,如何处理它的机制可能会因项目类型而异。现在通常不需要你现在这样做的方式。它通常比那更容易(不需要专门的课程)。以下是一个简单的控制台应用程序的基本过程(同样,事情可能因项目类型而异)。
&#34;你应该调查&#34;强烈输入&#34;资源而不是 你处理事情的方式。还研究卫星组件和 &#34; System.Threading.Thread.CurrentThread.CurrentUICulture&#34;属性 (还有#34; CurrentCulture&#34;你应该看的属性,但是 这并不会影响您的资源,而这些资源总是受到资源的控制 &#34;的CurrentUICulture&#34;属性)。请注意&#34; CurrentUICulture&#34; 属性通常设置为系统的当前语言(当你的 应用程序开始)。当您访问程序中的任何资源时,例如 &#34; Resources.MyString&#34; (这是一个强类型的例子 系统将寻找您需要查看的资源 &#34; MyString的&#34;基于&#34; CurrentUICulture&#34;属性。如果那个属性 当前设置为系统默认值(通常是除非 你在代码中改变它,然后你将获得&#34; MyString&#34;的版本。背部 来自您应用程序的主程序集(默认语言资源是 存储在那里)。如果你改变&#34; CurrentUICulture&#34;代码中的&#34; es&#34; 然而(对于西班牙语),那么系统将寻找&#34; MyString&#34;在里面 file&#34; es \ YourApp.resources.dll&#34; (关闭你的程序的根文件夹)。 如果它在那里找不到(如果你没有,那么该文件夹可能不存在 支持西班牙语),或更现实地说,&#34; MyString&#34;根本没有 在该(西班牙语)DLL中翻译,然后它将回退到您的应用程序 主程序集,因此您将再次获取默认语言字符串。 同样,这是短篇小说,但它涵盖了基本细节。它&#39; S 传统上被称为&#34; hub and spoke&#34; MSFT中的模型 文档(虽然有时使用其他术语),它依赖 关于&#34;后备&#34;前面提到的过程。例如,如果你设置 &#34; System.Threading.Thread.CurrentThread.CurrentUICulture&#34;到&#34; es-AR&#34; 这是阿根廷语中的西班牙语,然后该程序将会看起来 为&#34; MyString&#34;在&#34; es-AR \ YourApp.resources.dll&#34;。如果没有找到那里 (你不支持&#34; es-AR&#34;例如,所以没有这样的文件夹, 或者字符串根本就不存在),那么它将会回落&#34;到了 &#34; ES&#34;相反的文件夹(称为中性文化,在这种情况下只是 系统假设的普通西班牙语是下一个最好的东西)。如果不 在那里(在&#34; es \ YourApp.resources.dll&#34;),然后再次,系统 将回退到主要中嵌入的默认语言字符串 部件。研究这一切,你会发现处理你的 与你现在的方式相比,字符串是轻而易举的。一切 为您自动处理包括后备情况 (只需调整 &#34; System.Threading.Thread.CurrentThread.CurrentUICulture&#34;财产 - 所有对强类型资源的引用,例如 &#34; Resources.MyString&#34;然后会以任何语言出现 属性目前设置为)。我希望有所帮助。