【问题标题】:How do I create a neutral fallback satellite resource for localization in C#.?如何在 C# 中创建用于本地化的中性后备卫星资源。?
【发布时间】:2018-06-25 19:06:37
【问题描述】:

我正在尝试修改现有的 WPF 应用程序以进行本地化。我的限制之一是所有资源(包括默认的 en-US 后备资源)都必须是卫星资源。它们都不能嵌入到主程序集中。

通过对 codeplex 的一些阅读,我发现我需要做的就是在我的 AssemblyInfo.cs 文件中进行以下更改。

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

当我这样做时,我在应用程序启动时遇到异常:

找不到任何资源 适用于指定的文化 或中立文化。确保 “XXX.YYY.ZZZ.g.en-US.resources” 被正确嵌入或链接到 程序集“XXX.YYY.ZZZ” 在编译时,或者所有 所需的卫星组件是 可加载且完全签名。

如果我切换回将后备资源 (en-US) 放在主程序集中,一切都会再次正常运行。根据我的阅读,如果您想将后备资源作为附属资源,则必须具有该语言环境的特定资源(即您必须具有 Resources.en-US.resx)。我说的对吗?

在我看来,例外情况是 g (.g.en-US)。这是否意味着什么?我的任何资源文件中都不存在 g?

我是否正确地创建了我的资源。我首先创建了一个通用 Resources.resx 文件,将所有字符串都放入其中。然后,我只需在 Visual Studio 中复制/粘贴并为每个特定的语言环境(ar、es-MX 等)重命名。然后,进行适当的翻译。

目前,我只关注一个项目的资源文件。也许它被挂在另一个没有其资源文件的美国版本的项目上?如果是这样,有什么方法可以让 Visual Studio 告诉我更多关于它真正挂断的信息?

【问题讨论】:

    标签: c# localization


    【解决方案1】:

    简而言之,您对资源文件和需要构建的内容的理解似乎是正确的。

    .g 用于已编译的 XAML 文件并为您自动构建。这里没有什么特别或神奇的事情发生。

    通常,后备资源嵌入在主程序集中。如果您不这样做,则必须为您将要做的每种文化创建一个附属资源集合,再加上一个 en-US 。

    【讨论】:

    • 在尝试了解卫星后备方法时,我创建了一个新的 WPF 应用程序。我在 AssemblyInfo.cs 中添加了“[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]”。这给了我如上所述,但我期待这一点,因为我没有创建 Resources.resx 文件的 en-US 版本。创建此文件后,我现在收到“无法找到资源 'window1.xaml'”错误。这让我很困惑,因为我不会将表单视为资源。将后备位置切换到 MainAssembly 后,我没有收到错误消息。还有什么想法吗?
    • 等等,我想我应该读一下。装配信息中的 cmets 说要将 en-US 添加到项目文件中。这似乎是多余的,但这样做解决了“找不到资源 window1.xaml”的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-25
    相关资源
    最近更新 更多