小编Mar*_*urg的帖子

拼出可访问时间标签的当前时间

我正在开发一个应用程序,我需要有标签显示时间,本地化为用户的语言环境.这一切都可以通过使用NSDateFormatter()类来正常工作.

let timeFormatter = NSDateFormatter()
timeFormatter.dateStyle = NSDateFormatterStyle.NoStyle
timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle
let timeStr: String = timeFormatter.stringFromDate(time)
Run Code Online (Sandbox Code Playgroud)

NSDateFormatter()VoiceOver没有正确说出生成的字符串.这对美国英语来说还不错,但不是荷兰语(我的母语).

然后我尝试使用NSDateComponentsFormatter()该类并NSDateComponentsFormatterUnitsStyle.SpellOut为该unitsStyle属性指定.

let timeComponentFormatter = NSDateComponentsFormatter()
timeComponentFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyle.SpellOut
let accessibilityTimeStr: String = timeComponentFormatter.stringFromDateComponents(timeComponents)!
Run Code Online (Sandbox Code Playgroud)

虽然这会产生一个可以由VoiceOver说出的好字符串,但它并不像母语人士那样说时间.虽然它使用了正确的语言,但它并没有按照用户所在地区的文化惯例进行格式化.

当我在启用了VoiceOver的情况下点击锁定屏幕上的时间时,它会正确地说出时间,就像母语人士所说的那样,用我尝试过的每种语言.因此,iOS中必须有能够生成可由VoiceOver说出的正确字符串的内容.

我找不到这样做的公共API.我错过了什么,或者这可能是私有API?

accessibility ios

9
推荐指数
0
解决办法
535
查看次数

使用ASP.NET MVC的多语言URL

我正在研究一个新项目的概念,我需要支持多语言URL.理想情况下,所有URL都需要使用用户的本地语言.因此,我们不想使用domain.com/en/contactdomain.com/es/contact,但我们喜欢domain.com/contactdomain.com/contactar(contactar是西班牙语以便联系).在内部,两者都应该路由到同一个ContactController类.

这可以通过为每种语言添加到Global.asax.cs的多个静态路由来处理,但我们希望使其非常动态,并希望系统用户能够通过内容管理更改URL的转换系统.所以我们需要从URL到控制器和动作的某种动态映射.

通过查看MVC3的源代码,我发现MvcHandlerProcessRequestInit方法负责确定要创建哪个控制器.它只是在RouteData中查找控制器的名称.覆盖默认MVC路由的一种方法是创建使用自定义RouteHandler的简单默认路由.此RouteHandler强制MVC使用我自己的自定义子类MvcHandler,它会覆盖ProcessRequestInit方法.在重新调用原始ProcessRequestInit之前,此重写方法将我自己动态找到的控制器和操作插入到RouteData中.

我试过这个:

的Global.asax.cs

routes.Add(
    new Route("{*url}", new MultilingualRouteHandler())
    {
        Defaults = new RouteValueDictionary(new { controller = "Default", action = "Default" })
    }
);
Run Code Online (Sandbox Code Playgroud)

MultilingualRouteHandler.cs

public class MultilingualRouteHandler : IRouteHandler
{

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MultilingualMVCHandler(requestContext);
    }

}
Run Code Online (Sandbox Code Playgroud)

MultilingualMvcHandler.cs

public class MultilingualMVCHandler : MvcHandler
{

    public MultilingualMVCHandler(RequestContext context) …
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc asp.net-mvc-routing asp.net-mvc-3

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