小编Mor*_*lus的帖子

本地化.NET Web应用程序的最佳方式(服务器端和客户端)

在过去的几天里,我已经为我用MVC编写的web应用程序实现了Localization.有三个主要任务可以解决 Lozalization "问题",我可以指出:

  1. 存储:以多种语言存储Key-Value字符串对,以便在您的应用程序中使用
  2. 服务器端访问:根据服务器端脚本中的给定密钥访问值(例如,视图,控制器,Web表单等...)
  3. 客户端访问:根据客户端脚本中的给定密钥访问值(例如Java脚本)
  4. 创建文化转换机制.

有几种方法可以完成我已经探索过的每项任务,而我正在努力在它们之间进行选择.我有两个问题:

  1. 我想知道什么是本地化的最佳实践?从你的角度来看.请为一种方法与另一种方法编写优点/缺点.
  2. 是否有其他方法或增强功能可以建议.

1.储存

资源文件:

  • 将本地化字符串的键值对存储在资源文件中
  • 为每种文化创建一个具有相同键的资源文件,例如myString.resx,myStrings.he-IL.resex等...

XML文件:

  • 创建一个结构化XML文件,其中包含每个特定于每个文化特定值的每个键和childe节点的父节点,例如

    <string key="myAppName">
        <heIL>some Hebrew value</heIL>
        <enUS>some English value</enUS>
    </string>
    
    Run Code Online (Sandbox Code Playgroud)

2.服务器端访问

  • 使用两个存储选项,从服务器端访问将非常容易.
    • 在这种情况下使用资源文件稍微容易一些,因为有自动生成的classess以便于访问值.因此,您可以将资源用作具有静态属性的常规clasess,以根据键访问每个字符串值.
    • 使用XML文件,您必须自己写下访问层代码,这不一定是坏事 - 因为您可以通过这种方式获得更多控制(仅在您需要时)

3.客户端访问

这是有趣的,有时很复杂的地方.我在这里探讨了两个选项,我不知道如何继续.

服务器端生成的脚本:

  • 在View\Web-Form中,在<script>标记内添加服务器脚本渲染块
  • 从这一点开始,在java脚本中动态创建一个键数组或静态变量,并将所需的字符串放在其中.这是一个使用Razor引擎的例子.

       <script type="text/javascript">
                k_CultureInfo = "@CultureInfo.CurrentCulture.Name";
                K_ApplicationName = "@MyStrings.SomeStringKey";
                ....
       </script>
    
    Run Code Online (Sandbox Code Playgroud)

自定义HTTP处理程序:

我在博客pos中找到了这个想法:在ASP.NET Here 中的JavaScript文件中本地化文本

  • 您可以编写一个处理任何".js.axd"请求的HTTP处理程序来到服务器.
  • "ScriptTranslatorHandler"将读取的javascrip文件和西港岛线在你的Java脚本替换预定义的令牌如的任何实例翻译(SomeStringKey)由上述任何方法采取正确的字符串.

language-agnostic asp.net asp.net-mvc design-patterns localization

5
推荐指数
1
解决办法
2070
查看次数

为什么我的MVC应用程序中有两个web.config文件

Views文件夹中有一个.

应用程序的根目录中还有另一个.

我想注册一个自定义处理程序,我不知道代码应该去哪里.我在集成模式下运行IIS7所以我必须添加一个<handlers>标签,<system.webServer>但是当我在Views文件夹中查看web.config时,我看到它使用了<httpHandlers>under <system.web>标签.

所以有两个问题:1.为什么mvc应用程序中有两个web.config文件?2.我应该在何处以何种方式注册我的自定义HTTP处理程序?

model-view-controller asp.net-mvc iis-7 httphandler

4
推荐指数
1
解决办法
6917
查看次数

使用.gitignore不提交bin,debug和config文件夹

我在我的ASP.NET MVC项目中使用git.

我想无论从文件debug,binconfig文件夹中的"待Chages"对话框中显示广告,因此我不会将它们提交到我的仓库.

这些文件是特定于机器的,特别是config文件夹.

我尝试将以下内容添加到.gitignore:

myproject\bin**
myproject\obj**
myproject\config\**
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为在每次构建或配置更改后,仍会显示所有三个文件夹下的所有文件.

我究竟做错了什么?

git gitignore

4
推荐指数
1
解决办法
2万
查看次数

使用Android Development Studio分析Android应用程序的性能

在使用Android Development Studio时,分析我的应用程序性能的最佳方法是什么?

android performance-testing android-studio

4
推荐指数
1
解决办法
2646
查看次数

如何对ASP.NET MVC Web应用程序进行授权的HttpWebRequest

我有一个ASP.NET MVC Web应用程序,需要允许公共API下载文件.这是动作代码:

public ActionResult DownloadFile(int id)
{
        var item = _context.GetRepositoryFileByID(id);
        if (item == null)
        {
            return HttpNotFound();
        }
        var filePath = Path.Combine(AppConfig.FilesRepositoryStorageRoot, item.IntrenalFilePath);
        return File(filePath, "application/pdf");
}
Run Code Online (Sandbox Code Playgroud)

此方法是具有[Authorize(Roles = "Administrator,User")]设置属性的控制器, 因此仅登录用户可以访问此操作

现在,此操作应允许用户使用以下代码发出请求:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(fileDownloadUrl));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)

我在这里缺少的是如何将授权传递HttpWebRequestDownloadFile动作.

我尝试过的每件事都会返回登录页面,因为应用程序无法授权用户并允许他访问该DownloadFile操作.

我试图使用以下代码将此Cookie值传递给请求该文件的网站

var authCookie = FormsAuthentication.GetAuthCookie(User.Identity.Name, true);
var authCoockieValue = authCookie.Value;
Run Code Online (Sandbox Code Playgroud)

然后网站使用了这个值:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(fileDownloadUrl));
request.Headers[HttpRequestHeader.Authorization] = "Bearer " + authorization;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Run Code Online (Sandbox Code Playgroud)

但是这没有用.我也尝试用"Basic"而不是"Bearer"标签传递标题,但它也是字段. …

c# asp.net-mvc forms-authentication httpwebrequest asp.net-mvc-4

4
推荐指数
1
解决办法
5849
查看次数

IDENTITY INSERT 不适用于 MERGE

我有以下代码:

PRINT N'Merging Wide Format Types...'
SET IDENTITY_INSERT WideFormatTypes ON
GO
MERGE INTO WideFormatTypes AS Target
USING (VALUES 
    (1, N'****', NULL),
    (2, N'****', NULL),
    (3, N'******', NULL),
    (4, N'*******', NULL),
    (5, N'******', NULL),
    (6, N'*******', NULL)
)
AS Source (TypeID, TypeName, Description) 
ON Target.TypeID = Source.TypeID
WHEN MATCHED THEN
    UPDATE SET
    TypeID = Source.TypeID,
    TypeName = Source.TypeName,
    Description = Source.Description
WHEN NOT MATCHED BY TARGET THEN 
    INSERT (TypeID, TypeName, Description) 
    VALUES (TypeID, TypeName, Description);

SET IDENTITY_INSERT WideFormatTypes OFF
GO
Run Code Online (Sandbox Code Playgroud)

它返回一个错误 …

sql sql-server

4
推荐指数
1
解决办法
3221
查看次数

Generic:ArrayList of?在Java中扩展ISomeInterface

我在以下代码中遇到了一些麻烦.

public ArrayList<? extends IEvent> getEventsByDateRange(DateTime minStartTime,  DateTime minEndTime) 
{
    ArrayList<? extends IEvent> returnedEvents = new ArrayList<GoogleEvent>();
    returnedEvents.add(new GoogleEvent());
    return (returnedEvents);
}
Run Code Online (Sandbox Code Playgroud)

这将为"returnedEvents.add(new GoogleEvent());代码行"返回以下编译错误:

方法add(捕获#1-of?extends IEvent)在ArrayList类型中不适用于参数(GoogleEvent)

该课程的声明GoogleEvent如下:

public class GoogleEvent implements IEvent {...}
Run Code Online (Sandbox Code Playgroud)

我知道在Java中使用泛型有一些棘手的部分,因此是通配符,但我似乎无法弄清楚这一点.

谢谢.

java generics arraylist bounded-wildcard

3
推荐指数
1
解决办法
1997
查看次数

如何在编辑器模板中使用传递的选择列表

我正在尝试创建一个编辑器模板,它将为传递的选择列表中的每个值创建一个"引导样式"单选按钮(就像Html.DropDownFor创建下拉列表的方法一样)

所以我在我看来有这个电话:

@Html.EditorFor(model => model.FaultTypeID,"RadioButtonList", 
        new SelectList(Model.AllowdeFaultTypes, "FaultTypeID", "FaultTypeName"))
Run Code Online (Sandbox Code Playgroud)

现在是RadioButtonList的模板:

@foreach (var item in ViewData["Items"] as SelectList)
{
    <a>@item.Text</a> <b>@item.Value</b>
}
Run Code Online (Sandbox Code Playgroud)

但是转换失败了,我得到了一个NullReferanceExeption.通过反射,我看到ViewData["Items"]值是类型System.Collections.Generic.List<CamelotFaultManagement.DAL.FaultType>

问题是我真的不想将RadioButtonList编辑器模板与CamelotFaultManagement.DAL.FaultType类紧密结合,只是没有任何意义这样做.我想要一个通用的编辑器模板.

asp.net-mvc mvc-editor-templates asp.net-mvc-3

3
推荐指数
1
解决办法
2399
查看次数

自定义属性 - 为枚举获取"不是有效的命名属性参数"

当我尝试使用如下MultiselectComperer值时,为什么会收到此消息:

[Display(ResourceType = typeof(OrdersManagementStrings), Name = "PrintSettings")]
[FilterAttribute(IsMultiselect = true, MultiselectComperer=FilterAttribute.eMultiselectComperer.Or)]
public ePrintSettings PrintSettings { get; set; }
Run Code Online (Sandbox Code Playgroud)

这是自定义属性的代码...所有emuns都是公共的...但我收到此消息:

'MultiselectComperer'不是有效的命名属性参数,因为它不是有效的属性参数类型....

[AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)]
public sealed class FilterAttribute : Attribute
{
    public enum eMultiselectComperer
    {
        Or,
        And
    }

    public bool IsMultiselect { get; set; }

    public eMultiselectComperer? MultiselectComperer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc attributes custom-attributes

3
推荐指数
1
解决办法
5329
查看次数

.ajaxStart和.ajaxStop由于一些奇怪的原因没有解雇

当我发出ajax请求时,我将一个"正在加载"的类附加到正文中,这样我就可以显示进度动画......出于某种原因,函数ae从未调用过,我看不到警报......

function setLoadingPanel()
{
    var timer;
    var body = $("body");

    alert("Set AJAX HOOKS...");
    $("body").on({
        ajaxStart: function ()
        {
            alert("AJAX START");
            //timer = setTimeout(function () { body.addClass("loading"); }, 50)
        },
        ajaxStop: function ()
        {
            alert("AJAX STOP!!!");
            //$(this).removeClass("loading");
            //clearTimeout(timer);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我已经发出警报,试图查看钩子是否被调用,但由于某种原因没有弹出警报.

这是我使用简单的AJAX.ActionLink助手的ajax请求:

@{
    var ajaxDialogoptions = new AjaxOptions()
    {
        HttpMethod = "GET",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "DialogContainer",
        OnComplete = "OpenDialog('DialogContainer');"
    };
}
@Ajax.ActionLink(Model.AddNewItemButtonTitle, Model.AddActionName, Model.AddActionController, Model.AddActionRoutValues, ajaxDialogoptions, new { Class = "btn btn-primary anti-align-rtl" })
Run Code Online (Sandbox Code Playgroud)

这是我的捆绑脚本:

            Bundle bundle = …
Run Code Online (Sandbox Code Playgroud)

ajax model-view-controller asp.net-mvc jquery

2
推荐指数
1
解决办法
6983
查看次数