Mat*_*sca 17 c# asp.net-mvc resources localization
我知道这个问题已经多次出现在这些页面上,但我仍然没有找到我需要找到的"好解决方案".让我们开始解释.
.net和mvc中的本地化有两种方式,甚至可以混合在一起:
我将解释我尝试过的解决方案以及我遇到的所有问题.
资源文件中的文本,视图中的所有标记
这个解决方案让我将每个文本都放在资源中,以及视图中的每个标记,甚至是[strong]或[span]等内联标记.
优点:
缺点:
资源文件中的文本和内联标记,通过参数
此方法将使资源包含string.Format的一些占位符,并且这些占位符将使用内嵌标记进行后编码.
优点:
缺点:
本地化的意见
优点:
缺点:
结论
上述技术的混合继承了优点和缺点,但它仍然没有好处.我很难找到一个合适的生产解决方案,而上述所有都被认为是"不实用"和"耗时".
更糟糕的是,我发现没有一个工具可以将aspx或cshtml(甚至html)视图/页面中的"文本"重构为资源.所有工具都可以将代码文件(.cs或.vb)中的System.String实例重构为仅资源(例如resharper,以及我现在不记得的其他几个).
因此我陷入困境,找不到任何合适的东西,也无法在网上找到任何东西.是否有可能没有其他人遇到过这个问题,并找到了解决方案?
我个人喜欢在资源文件中存储内联标签的想法.不过我做的有点不同.我存储非常简单的标签<span class='emphasis'>dog</span>,然后我使用CSS来适当地设置标签的样式.现在,我不是将标签作为参数"传入",而是简单地span.emphasis在CSS中设置规则.变更延续到所有语言.
性别选项:
我想到并且非常喜欢的另一个选择是使用像StackOverflow自己的MarkdownSharp这样的"可读标记"语言.这样,您不会在资源文件中存储任何HTML,只会在标记文本中存储.所以在你的资源中你会有**dog**,然后它会通过视图中的markdown分流(我为此创建了一个帮助,(用法:) Html.Markdown(string text).现在你没有存储标签,你存储了一个常见的人类可读标记语言. markdownsharp source是一个.CS文件,它很容易修改.所以你总是可以改变它呈现结束HTML的方式.这使你可以完全控制所有资源,而不需要存储HTML,也不需要复制HTML的视图或块.
编辑
这也使您可以控制编码.您可以轻松确保资源文件的内容不包含有效的HTML.Markdown语法(如您所知,使用堆栈溢出)不包含HTML标记,因此可以无害地编码.然后,您只需使用助手将Markdown语法转换为有效的HTML.
编辑#2
降价中有一个错误,我必须自己解决.任何降价检测都将被呈现为"代码"块将被HTML编码.这是一个问题,如果你已经将HTML编码的所有内容传递给markdown,因为代码块中的任何内容都将被重新编码,这将>变成&gt;并完全搞砸代码块中的文本.为了解决这个问题,我修改了markdown.cs文件以包含一个布尔选项,该选项可以停止在代码块中编码文本的降序.有关我添加到MarkdownSharp项目问题的已修复.cs文件,请参阅此问题.
编辑#3 - Html助手示例
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9734 次 |
| 最近记录: |