【问题标题】:Localization Support for C# Console ApplicationC# 控制台应用程序的本地化支持
【发布时间】:2014-03-26 06:39:38
【问题描述】:

我创建了一个简单的控制台应用程序来显示“Hello World”字符串。后来我带了资源文件来支持不同的语言,放上“Hello World”的翻译版本。我尝试在中文操作系统中运行 console.exe,并希望看到“Hello World”以中文显示。不幸的是它显示的是英文。

经过分析,发现添加 .resx 文件会在项目中创建一个单独的文件夹,其中包含每种语言的 .resource dll(卫星程序集)。因此,如果我将 .exe 与其他文件夹一起放置并运行,则“Hello World”会以中文显示。如果我删除文件夹(.resource)然后只运行 .exe,那么它会再次以英文显示“Hello World”。

有没有办法创建一个所有资源文件映射在一起的 .exe。这样我就不需要在运行 .exe 之前将文件夹与 .exe 一起放置。

顺便说一句,我正在尝试使用 Strings.STRING_NAME 访问字符串,其中“Strings”是默认资源文件的名称。其他语言的字符串文件类型为Strings.fr.resx、Strings.de.resx。

请在这方面提供帮助。

提前致谢。

【问题讨论】:

  • 这个好像有解决办法:stackoverflow.com/questions/1453755/…
  • 我很好奇。这是要解决什么问题?将所有 tje 程序集编译成一个文件有什么好处?
  • 您好 Gusdor,主要问题是在远程机器上部署了一个 .exe 来显示本地化消息。
  • 尝试的一种解决方法是发布控制台应用程序,从而使用必要的翻译文件创建 setup.exe。运行 setup.exe 解决了这个问题。但是,我不确定这是否是正确的方法。请在这方面指导我。

标签: c# .net satellite-assembly


【解决方案1】:

解决办法在这里:

https://stackoverflow.com/a/1955060/1028323(单程序集多语言 Windows 窗体部署(ILMerge 和附属程序集/本地化)- 可能吗?)

【讨论】:

  • 谢谢卢卡斯。是的,它已经按照您的建议进行了配置。
【解决方案2】:

这些额外的程序集称为Satellte assemblies。它们是分开的,所以如果你只需要一些语言,你就不必部署所有的语言。

来自Introduction to Satellite Assemblies

根据定义,附属程序集不包含代码,除了 自动生成的。因此,它们不能被执行为 他们不在主大会中。但请注意,卫星 程序集与通常包含的主程序集相关联 默认中性资源(例如,en-US)。一个很大的好处是 您可以添加对新文化的支持或替换/更新卫星 无需重新编译或替换应用程序主程序的程序集 组装。

【讨论】:

    【解决方案3】:

    我有点困惑你正在做什么来解决当前选择的文化问题。

    您是否知道您需要首先设置文化以确保当前使用您想要的文化? 所以你需要做这样的事情:

         System.Threading.Thread.CurrentThread.CurrentUICulture = new   System.Globalization.CultureInfo("en-US");
         System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
    

    【讨论】:

    • 您好,感谢您的建议。我会尽力让你在这方面得到结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 2016-11-02
    • 2016-02-18
    • 2019-01-18
    • 1970-01-01
    • 2011-09-17
    相关资源
    最近更新 更多