- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我的问题是这样的:使用 MonoDevelop(这是我正在进行的许多项目的首选环境)如何将它们作为嵌入式资源正确地包含在项目中。
我的目标是拥有一个资源文件,其中包含消息键及其值的简单名称-值对,并为其本地化字符串创建单独的文件,例如
消息.资源
Hello.World = Hello World
Goodbye.Cruel.World = Goodbye, Cruel World
Messages.de.resources
Hello.World = Hallo Welt
Goodbye.Cruel.World = Auf Wiedersehen, grausame Welt
我有几个问题。
首先,MonoDevelop 的.resources 文件和Visual Studio 的资源概念有什么区别(如果有的话)。据我了解,MonoDevelop(和 SharpDevelop)允许您创建 .resources 文件,而 Visual Studio 使用 .resx 文件并通过 resgen 实用程序将它们编译成 .resources 文件(二进制文件类型)。在 MonoDevelop 中使用资源时,我是否需要使用 resgen 编译我的资源(例如 Messages.resources)?当我尝试仅使用 MonoDevelop 允许我通过他们的向导创建的直接 .resources 文件时,我收到以下错误:
“流不是有效的资源文件。”
其次,一旦我有了适当生成的资源文件,我就可以将它们嵌入到我的项目中,如果我理解正确的话,这会使资源成为程序集的一部分。如果我有两个文件,Messages.resources 和 Messages.de.resources,当我嵌入它们时,MonoDevelop(至少)会为它们分配相同的 ID 值。我是否需要在项目中包含我的默认本地化,然后为每个支持的语言环境创建一个单独的项目?接下来,C# 如何区分我的 Messages.resources 和 Messages.de.resources 文件(或它们是什么文件)?
我目前正在尝试使用以下代码解析我的消息资源:
...
public string Translate(string messageKey, CultureInfo cultureInfo) {
ResourceManager resourceManager = new ResourceManager("My.Project.Messages", Assembly.GetExecutingAssembly());
string message = resourceManager.GetString(messageKey, cultureInfo);
return message;
}
...
我觉得我在使用 C# 进行国际化/本地化/全局化等工作时遗漏了一些基本要点。我之前曾在 Java 中从事过国际化项目,但出于某种原因,我无法完全理解 C# 中的项目。
此外,顺便说一句——国际化项目中资源的“首选”目录结构是什么?
最佳答案
我不熟悉 .NET 本地化(我使用 gettext),但据我了解,.resources 文件是 binary format这实际上嵌入到您的 dll 中。你可以编译resx (XML)或 text resources使用 resgen 转换为二进制格式。文本文件更具可读性但只能用于字符串资源。 XML 更冗长,但可以表示二进制资源可以表示的所有内容。
通常的做法是将你的资源以.resx形式存储在项目中,MonoDevelop会在构建你的项目时自动将它们编译成.resources文件(你必须手动编译.txt文件)。不幸的是,MD 没有专门的 resx 文件编辑工具,因此您必须直接编辑 XML。
MD 确实有很好的 gettext 本地化工具,但 Windows 目前不支持这些工具。
关于C#、本地化、资源和 MonoDevelop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6567964/
在我将 MonoDevelop IDE 更新到最新版本 3.0.1 后,不再检测到我的 Monobjc 项目。我尝试重新安装 Monobjc,但未安装加载项,因为它们仅支持 MonoDevelop 2
我不知道它是怎么发生的,但是当我启动 Monodevelop 时,菜单突然以英语以外的语言出现。我尝试重新安装应用程序以及手动删除库下其他目录中的工件。没运气。重新安装后,它仍然以另一种语言加载。 最
MonoDevelop 中是否有任何方法可以创建您自己的代码片段,即可重用的代码?我知道在工具箱中你可以得到其他人的,但我似乎无法找到一种方法来添加我自己的东西。当然,我对 Monodevelop 还
我在 Mac 上使用 MonoDevelop 编写 MonoTouch 应用程序。当我打字时,Automatica 代码缩进/格式化效果很好。 问题是,当我复制和粘贴代码片段时,在很多情况下我会丢失格
我的任务列表板充满了旧的//Todo 注释任务,这些任务已从代码中解析出来。不幸的是,他们引用的文件早已消失,任务像僵尸一样徘徊。删除每个任务只会引发文件丢失的错误。如何手动强制完全清除任务列表以便它
我在哪里可以看到 MonoDevelop 中的 System.Diagnostics.Debug 和 System.Diagnostics.Trace 输出?我认为它应该出现在 Application
MonoDevelop 为每个项目创建这些。我应该将它们包含在源代码管理中吗? 最佳答案 来自MonoDevelop blog post : There were several long time
有谁知道是否可以设置运行您在 monodevelop 中创建的应用程序的工作目录? 应用程序被写入 bin/Debug 目录,这似乎是您调试应用程序时的工作目录。对于我的应用程序(我正在从 Windo
我想在 MonoDevelop 2.0(在 Ubuntu 下)中创建一些自定义模板,但我发现这个过程并不像我想要的那样直观。有谁知道模板存储在哪里?采用什么格式? 善良, 丹 最佳答案 在 MD 2.
题目说明了一切。我在 monodevelop 网站或通过谷歌找不到任何信息。 偶加System.Diagnostics.Debugger.Break()并运行 mono --debug MonoDev
我有 Ubuntu 12.04、MonoDevelop 2.8 和一些 valac .我知道 MD 支持 Vala 语言,但实际上我没有看到对 Vala 的任何支持。如果从头开始制作 C 解决方案,则
我正在尝试在 linux 上进行单声道开发,但是尝试创建一个包,给我错误无法获得 C# 编译器。找不到用于 Mono/.NET 3.5 的 C# 编译器。 我假设编译器是用 monodevelop 安
您可以将 MSpec 与 MonoDevelop 测试运行器集成吗?它是 working in Sharp-Develop .谷歌说'nothing ' 所以我猜在当前版本(2.8.2)中这是不可能的
右键单击(或按住 Control 单击,因为我使用的是 Mac)不会显示解决方案或项目的上下文菜单。 例如,在 Visual Studio 中,我会右键单击解决方案以将新项目添加到解决方案中。我已经查
阅读Using NuGet without committing packages to source control我明白我应该添加 .nuget文件夹到我的项目以在构建期间启用包还原...并阅读
我尝试将 Visual Studio 2012 csproj 文件导入 Monodevelop。一切正常,直到我编译。当我编译项目时,它为第一个表单生成 1 *.resources 文件,但对于以下表
我正在尝试在 Monodevelop for Mac 上安装 Monocross Framework。步骤应该是:1. 启动MonoDevelop。2. 在 MonoDevelop 中,选择 Tool
我想使用一些 GUI 对象来输出一些表的信息(此信息是只读的)。 Windows 窗体中有 DataGrid 和 DataGridView,但我找不到相同的 GTK# 类似物。谁能告诉我可以使用什么
在 Windows 上,我安装了 MonoDevlop 并尝试编译需要 Mono.Data.SQLiteClient 引用的 SQLite 示例。我在 MonoDevelop 中打开了“编辑引用”,除
我从 GitHub 得到了一个大项目,我正在尝试编译,但这些错误让我抓狂: Error CS0219: Warning as Error: The variable `memberInfo' is a
我是一名优秀的程序员,十分优秀!