0

我的 Sinatra 网站使用一种公认的 ghetto 方式在两种语言之间切换,这在我的本地机器上运行良好,但在 Heroku 上却不行。

app.rb的如下:

require 'sinatra'

get '/'  do
  set :erb, :views => settings.views + "/en"
  erb :index, :layout => false, :views => settings.views
end

get '/tr'  do
  set :erb, :views => settings.views + "/tr"
  redirect to('/home')
end
get '/en'  do
  set :erb, :views => settings.views + "/en"
  redirect to('/home')
end

get '/home'  do
  erb :home
end
get '/products' do
  erb :products
end
...

当我单击指向/en/trurl 的链接时,我被正确地重定向到该/home链接,但视图文件夹没有改变。

我的 gem 在两种环境中都是相同的版本:

rack (1.4.1)
rack-protection (1.2.0)
tilt (1.3.3)
sinatra (1.3.3)
bundler (1.3.2)

链接到该网站

请帮忙。

4

1 回答 1

2

我建议用像 i18n gem 这样更强大的东西来取代你公认的贫民窟方式

这是一个教程

而不是使用浏览器的语言(例如),您可以在前置过滤器中执行类似的操作

before do
  case request.path_info
    when /^\/tr/ then set :locale, "tr"
    else set :locale, "en"
  end
end

在助手中

helpers do
  def get_locale
    settings.locale
  end
  # other helpers from example
end

这样,您只需要一份视图模板副本,从而在您只需要更改一个元素时减少更改所有视图的复杂性(例如)

如果你想测试你的 sinatra 应用程序,就像它会在 heroku 上运行一样,你可以RACK_ENV=production在启动服务器之前抛出一个。前任。RACK_ENV=production ruby my_app.rb

于 2013-03-21T10:54:49.960 回答