小编khu*_*hka的帖子

为什么Rails中的语言环境设置充当全局(使用Thin时)?

我刚刚意识到推荐的Rails方法可以在控制器中设置区域设置

before_filter :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end
Run Code Online (Sandbox Code Playgroud)

全局设置区域设置.上面的代码有效,但我想知道default_locale如果你必须明确键入它是真的默认?

我期望的是每个请求都有一个区域设置(就像我们有每个请求的会话一样)并做类似的事情:

def set_locale
  locale = params[:locale] if params[:locale]
end
Run Code Online (Sandbox Code Playgroud)

并且I18n.default_locale默认使用了.这将理想地匹配路径中的可选区域设置:

# config/routes.rb
scope "(:locale)", :locale => /en|nl/ do
  resources :books
end
Run Code Online (Sandbox Code Playgroud)

目前,如果出于某种原因我在某些操作中跳过了语言环境设置,它会使用上一个请求中设置的语言环境,该语言环境可能来自其他用户!

并且没有潜在的竞争条件,因为一个请求可以改变全局,I18n.locale而另一个请求(在设置之前设置了另一个语言环境)处于渲染的中间?


更新:我现在发现的一些细节,来自I18n文件:

将当前语言环境设置为伪全局,即在Thread.current散列中def locale =(locale)

现在我想了解每个请求是否是一个单独的线程.


更新2:请参阅我的答案以获得解释.

localization ruby-on-rails internationalization ruby-on-rails-3

19
推荐指数
1
解决办法
3743
查看次数

find,xargs:为每个文件执行命令链

如果问题标题不够丰富,我很抱歉.请随意提出更好的变体.

我想执行以下任务:在一个目录中,我有许多文件是JPEG格式的照片.我想从EXIF中提取拍摄照片的日期,为每个日期创建一个新目录,并将文件移动到相关目录.

(EXIF日期和时间有格式YYYY:MM:DD hh:mm:ss,我希望将目录名格式化为YYYY-MM-DD,这就是我使用sed的原因)

我知道如何分别执行这些任务,但未能将它们组合在一起.我花了一些时间来调查如何执行命令,使用find带有-execxargs但仍然未能了解如何正确连锁一切.

最后,我能够使用两个命令完成我的任务:

find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
    | sed 's/ [0-9:]*//; s/:/-/g' | xargs mkdir -p" \;

find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
    | sed 's/ [0-9:]*//; s/:/-/g; s/$/\//' | xargs mv {}" \;
Run Code Online (Sandbox Code Playgroud)

但我不喜欢重复,我不喜欢-exec sh -c.有没有正确的方法在一行中执行此操作而不使用-exec sh -c

bash shell pipe find xargs

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