如何在Sinatra中从URL检测语言

如何在Sinatra中从URL检测语言,url,internationalization,url-routing,sinatra,padrino,Url,Internationalization,Url Routing,Sinatra,Padrino,我有一个多语言网站,我把语言放在类似domain.com/en/的URL中。当用户没有在URL中输入语言时,我想将他重定向到主语言页面,如“domain.com/posts”到“domain.com/en/posts”。有没有一种简单的方法可以让Sinatra做到这一点 我有一百多条路线。因此,对每条路线都这样做并不是一个很好的选择 获取“/:locale/posts”do。。。结束 获取“/帖子”执行。。。结束 有人能帮我吗 谢谢使用before过滤器,有点像这样: set:locales,%

我有一个多语言网站,我把语言放在类似domain.com/en/的URL中。当用户没有在URL中输入语言时,我想将他重定向到主语言页面,如“domain.com/posts”到“domain.com/en/posts”。有没有一种简单的方法可以让Sinatra做到这一点

我有一百多条路线。因此,对每条路线都这样做并不是一个很好的选择

获取“/:locale/posts”do。。。结束

获取“/帖子”执行。。。结束

有人能帮我吗


谢谢使用before过滤器,有点像这样:

set:locales,%w[en-sv-de]
设置:默认语言环境“en”
set:locale\u模式,/^\/?({Regexp.union(settings.locals)})(\/.+)$/
帮手
def语言环境
@语言环境| |设置。默认语言环境
结束
结束
在做之前
@locale,request.path\u info=$1,$2如果request.path\u info=~settings.locale\u模式
结束
获取“/example”do
案例区域设置
当‘恩’然后‘你好,我的朋友!’
当“德”然后是“你好,我的朋友!”
当“sv”然后是“Hallåmin vän!”
还有什么
结束
结束
随着Sinatra即将发布,您将能够做到:

before('/:locale/*'){@locale=params[:locale]}

@Konstantin:有没有办法让它适用于根URL?(例如:/and/en/)可能带有“get”/?:locale?/“do”?但是那样的话,它总是会给出默认的语言环境,我必须稍微修改一下,使其表现得像其他路由一样。有什么好的做法吗?@David将正则表达式更改为
/^\/?({Regexp.union(settings.locales)})(\/.*)$/
,它适用于
/
/en/