使用resx文件进行本地化会生成MissingManifestResourceException

克里斯

这是我对本地化的第一次尝试,对它的了解越多,我就越困惑。老实说,我现在只是在寻找答案。所以这是我得到的错误:

未处理的异常: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中所有翻译所围绕的(用于处理本地化资源)。但是,如何处理它的机制可能会因项目类型而异。现在通常不需要您执行此操作的方式。通常比这要容易得多(不需要专用的类)。例如,这是一个简单的控制台应用程序的基本过程(同样,情况可能会因项目类型而异)。

  1. 创建一个名为“ TestApp”的新控制台应用程序
  2. 打开项目的属性(例如,在解决方案资源管理器中右键单击它,然后选择“属性”),然后在属性窗口中单击“资源”选项卡。现在,单击屏幕中间显示的按钮,该按钮显示“该项目不包含默认资源文件。单击此处创建一个”。这会将“ Resources.resx”添加到您的解决方案中(在“解决方案资源管理器”中的“ Properties”文件夹下),它将在“ .resx”编辑器中自动打开。
  3. 在“ .resx”编辑器中添加一个名为“ MyString”的字符串。为其分配“这是我的默认字符串”(或其他内容)。
  4. 在您要使用字符串的代码中,添加一个“ using TestApp.Properties”语句(继续阅读)。现在,您可以通过静态属性“ Resources.MyString”访问该字符串。这是在“ Resources.Designer.cs”中声明的,该文件是VS在上面的步骤2中自动创建的“隐藏代码”文件(即,它是Solution Explorer中“ Resources.resx”的子代)。VS会为您照顾该文件(为您在上面3中添加的每个字符串添加一个新的静态属性到“ TestApp.Properties”命名空间中)。请注意,这些字符串称为“强类型资源”。
  5. 在您的项目中添加一个新的“ .resx”文件,并将其命名为“ Resources.es.resx”。这将包含西班牙语字符串。创建完成后,将其在解决方案资源管理器中拖到“ Properties”文件夹(因此它现在与“ Resources.resx”位于同一文件夹中-所有本地化的“ .resx”文件必须与“ Resources.resx”位于同一文件夹中)。
  6. 双击“ Resources.es.resx”,然后向其中添加“ MyString”。将其文本设置为“这是我的西班牙语字符串”。
  7. 如果要更改代码中的语言以选择字符串的西班牙语版本,只需将代码中的“ System.Threading.Thread.CurrentThread.CurrentUICulture”属性设置为“ es”。现在,只要您引用“ Resources.MyString”,该字符串的西班牙语版本就会(自动)返回。IOW,它遵循当前设置为“ System.Threading.Thread.CurrentThread.CurrentUICulture”的条件。因此,您通常会根据应用程序的要求更改后一个属性(例如,当用户从GUI单击所需的语言时),并且所有强类型的资源(通常仅是字符串)将自动采用新的语言。
  8. 这是如何运作的?下面的段落摘录自我曾经发给我的客户的内容。它足以使您入门(请注意,对于上面的示例,下面对“ YourApp”的引用将更改为“ TestApp”):

如果该属性当前设置为系统默认值(除非您在代码中对其进行更改,否则通常会设置为默认值),那么您将从应用程序的主程序集获取“ 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

每种语言使用多个resx文件进行本地化

使用在LocalHost而非服务器MVC上运行的.resx文件进行本地化

ASPNET Core 和使用 resx 文件的本地化

使用 C# Windows 窗体本地化,无法访问我的 .resx 文件

如何使用子目录中的RESX文件本地化WPF应用程序

使用资源文件进行.NET本地化的策略

如何使用BufferedReader进行本地化?

使用@page 指令进行本地化

Razor .resx 视图本地化

使用资源文件进行MVC 3本地化全球化

Java是否具有等效于.NET资源(.resx)的本地化文件?

WinForms本地化。该语言不反映默认的resx文件

WPF 本地化多语言 ResourceDictionary 与资源文件 (.RESX)

如何通过读取App_LocalResources文件(.resx)来本地化asp:TextBox的占位符

能够使用多个po文件进行本地化asp.net core 2.2

如何使用Xamarin Forms绑定资源文件中的动态数据以进行本地化

CakePHP-在本地文件中使用本地化功能(__())

Windows Phone 8:使用AppResources.resx本地化图块的显示名称

如何使用 RESX 本地化 WPF .net-core 应用程序

如何使用本地化文件并覆盖1个本地化功能

HTML文件本地化

使用laravel对页面标题进行本地化

使用python / django进行日期时间本地化

使用一种资源进行UWP本地化

使用自定义的本地化资源进行构建

使用静态方法进行WPF本地化

使用Babel进行Flask WTF本地化

Visual Studio C#更新本地化语言resx

使用.strings文件的NSLocationWhenInUseUsageDescription本地化不起作用