我知道这个问题已经在这些页面上提到过很多次了,但我仍然没有找到我需要找到的“好的解决方案”。让我们开始解释吧。
.net 和 mvc 中的本地化是通过两种甚至可以混合在一起的方式进行的:
我将解释我尝试过的解决方案以及我遇到的所有问题。
资源文件中的文本, View 中的所有标签
这个解决方案会让我把每个文本都放在资源中,每个标签都放在 View 中,甚至是 [strong] 或 [span] 这样的内联标签。
优点:
缺点:
资源文件中的文本和内联标签,通过参数
此方法将使资源包含一些 string.Format 的占位符,这些占位符将在编码后填充内联标记。
优点:
缺点:
本地化 View
优点:
缺点:
结论
上述技术的混合继承了优点和缺点,但仍然不好。我面临着寻找合适的高效解决方案的挑战,而上述所有问题都被认为“不切实际”且“耗时”。
更糟糕的是,我发现没有一种工具可以将“文本”从 aspx 或 cshtml(甚至 html) View /页面重构为资源。那里的所有工具都可以将代码文件(.cs 或 .vb)中的 System.String 实例重构为仅资源(例如 resharper,以及其他几个我现在不记得了)。
所以我被困住了,无法自己找到合适的东西,也无法在网络上找到任何东西。有没有可能没有其他人以前遇到过这个问题并找到了解决方案?
最佳答案
我个人喜欢在资源文件中存储内联标签的想法。但是我做的有点不同。我存储非常简单的标签,如 <span class='emphasis'>dog</span>然后我使用 CSS 适本地设置标签的样式。现在,我不再将标签作为参数“传入”,而是简单地设置 span.emphasis 的样式。在我的 CSS 中适本地规则。变化会延续到所有语言。
更性感的选择:
我想到并且非常喜欢的另一个选择是使用“可读标记”语言,例如 StackOverflow 自己的 MarkdownSharp .这样你就不会在资源文件中存储任何 HTML,只有 Markdown 文本。所以在你的资源中你会有 **dog**然后它通过 View 中的 markdown 分流(我为此创建了一个帮助程序,(用法:Html.Markdown(string text))。现在你不是在存储标签,而是在存储一种常见的人类可读标记语言。markdownsharp 源是一个.CS 文件,它很容易修改。因此您可以随时更改它呈现结尾 HTML 的方式。这使您可以完全控制所有资源,而无需存储 HTML,也无需复制 View 或 HTML block 。
编辑
这也让您可以控制编码。您可以轻松地确保资源文件的内容不包含有效的 HTML。 Markdown 语法(正如您从使用堆栈溢出中了解到的那样)不包含 HTML 标记,因此可以无害地进行编码。然后您只需使用您的助手将 Markdown 语法转换为有效的 HTML。
编辑 #2
我必须自己修复 markdown 中的一个错误。 Markdown 检测到的任何内容都将呈现为“代码” block ,并将进行 HTML 编码。如果您已经对传递给 markdown 的所有内容进行了 HTML 编码,那么这是一个问题,因为代码块中的任何内容都将被重新编码,这将变成 >。进入&gt;并完全搞砸了代码块中的文本。为了解决这个问题,我修改了 markdown.cs 文件以包含一个 bool 选项,该选项阻止 markdown 在代码块中对文本进行编码。 See this issue对于我添加到 MarkdownSharp 项目问题的固定 .cs 文件。
编辑 #3 - Html Helper 示例
public static class HtmlHelpers
{
public static MvcHtmlString Markdown(this HtmlHelper helper, string text)
{
var markdown = new MarkdownSharp.Markdown
{
AutoHyperlink = true,
EncodeCodeBlocks = false, // This option is my custom option to stop the code block encoding problem.
LinkEmails = true,
EncodeProblemUrlCharacters = true
};
string html = markdown.Transform(markdownText);
return MvcHtmlString.Create(html);
}
}
关于c# - Asp.net Mvc、Razor 和本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5355646/
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie
我的Rails站点使用了一个确实不是很好的gem。每次我需要做一些新的事情时,我最终不得不花费与向实际Rails项目添加代码一样多的时间来为gem添加功能。但我不介意,我将我的Gemfile设置为指向我的gem的GitHub分支(我尝试提交PR,但维护者似乎已经下台)。问题是我真的没有找到一种合理的方法来测试我添加到gem的新东西。在railsc中测试它会特别好,但我能想到的唯一方法是a)更改~/.rvm/gems/.../foo。rb,这看起来不对或者b)升级版本,推送到Github,然后运行bundleup,这除了耗时之外显然是一场灾难,因为我不确定我所做的promise是否正
我希望访问我机器上的所有HTTP流量(我的Windows机器-不是服务器)。据我了解,拥有一个本地代理是所有流量路线的必经之路。我一直在谷歌搜索但未能找到任何资源(关于Ruby)来帮助我。非常感谢任何提示或链接。 最佳答案 WEBrick中有一个HTTP代理(Rubystdlib的一部分)和here's一个实现示例。如果你喜欢生活在边缘,还有em-proxy伊利亚·格里戈里克。这postIlya暗示它似乎确实需要一些调整来解决您的问题。 关于ruby-如何捕获所有HTTP流量(本地代理)
我正在尝试找出一种方法来显示来自不在RAILS_ROOT下(在RedHat或Ubuntu环境中)的已安装文件系统的图像。我不想使用符号链接(symboliclink),因为这个应用程序实际上是通过Tomcat部署的,而当我关闭Tomcat时,Tomcat会尝试跟随符号链接(symboliclink)并删除挂载中的所有图像。由于这些文件的数量和大小,将图像放在public/images下也不是一种选择。我查看了send_file,但它只会显示一张图片。我需要在一个格式良好的页面中显示6个请求的图像。由于膨胀,我宁愿不使用Base64编码,但我不知道如何将图像数据与呈现的页面一起传递下去。
我刚刚在我的Ubuntu9.10服务器上安装了TeamBox。我使用提供的服务器脚本在端口3000上启动并运行它。它的运行速度非常慢,从另一台计算机连接时每个HTTP请求最多需要30秒。我使用链接从shell加载TeamBox,一点也不花时间。然后我设置了一个SSH隧道,它再次运行得非常快。我通过此服务器上的apache以及SAMBA等运行了大约30个虚拟主机,没有任何问题。我该如何解决这个问题? 最佳答案 我的redmine(ruby,webrick)太慢了。现在我解决了这个问题:apt-getinstallmongrelruby