存储库:https://github.com/bcsantos/translate
直播实例:http://ta-translate.herokuapp.com/
直播实例管理员:http://ta-translate.herokuapp.com/admin(电子邮件:foo@bar.com pwd:foobar)
注意
,如下所述,目前我可以在管理员中更改区域设置的唯一方法是
set :locales, []
并刷新网站前端和管理员。这似乎不适用于实例。
I18n.default_locale = :pt_br
admin / app.rb中的是我到目前为止在admin中设置语言环境的唯一方法,而
I18n.locale = :pt_br
不起作用。
https://github.com/bcsantos/translate/blob/master/admin/app.rb
#的boot.rb
Padrino.before_load do
I18n.locale = :en
end
require 'padrino-contrib/auto_locale'
https://github.com/bcsantos/translate/blob/master/config/boot.rb
#app.rb
set :locales, [:en, :pt_br]
https://github.com/bcsantos/translate/blob/master/app/app.rb
问题A
switch_to_lang(:lang)
没有在这种情况下工作
%li.divider
%li
=link_to "EN", switch_to_lang(:en)
%li.divider
%li
=link_to "PT", switch_to_lang(:pt_br)
https://github.com/bcsantos/translate/blob/master/app/views/partials/_menu.haml
就目前而言,我能找到设置区域设置的唯一方法是
set :locales, [:en, :pt_br] # in front-end
I18n.default_locale = :pt_br # in admin
问题B
是一种在特定路线下包含所有路径的方法吗?
本地化的唯一网址是由
生成的get :image, with: [:id, :name] do
# params[:splat] still contains whatever is entered at the end
amenity = Amenity.find(params[:id])
content_type amenity.picture.content_type
#response.headers['Content-Length'] = amenity.picture.length
response.write(amenity.picture.read)
response.finish
end
https://github.com/bcsantos/translate/blob/master/app/controllers/amenities.rb
应生成http://tourapart.herokuapp.com/artworks/image/53ac2904895e9fa4f4000018/picture.jpg/picture 但是在localhost中的当前分支下得到类似
的内容/amenities/image/5391dbdef2c796e026000001/picture.jpg?lang=en
因此找不到。有没有办法
set :locale_exclusive_paths, ['/amenities/image/']
包含该下的所有路线?正则表达式
set :locale_exclusive_paths, ['/\/amenities\/image\/*/']
没有工作。
<小时/> 问题C,......
页面已经消失,找不到,重命名模板以包含文件名中的语言环境在此之前没有做任何事情,语言环境数据适用于链接但不适用于模型属性:
%a= link_to "#{t "links.amenities"}".upcase!, '/amenities'
有效,但是:
class Amenity
include Mongoid::Document
include Mongoid::Timestamps # adds created_at and updated_at fields
# field <name>, :type => <type>, :default => <value>
field :name, localize: true, :type => String
field :description, localize: true, :type => String
field :category, localize: true, :type => String
field :price, localize: true, :type => Integer
field :phone, :type => String
mount_uploader :picture, Uploader
field :featured, :type => Boolean
# You can define indexes on documents using the index macro:
# index :field <, :unique => true>
# You can create a composite key in mongoid to replace the default id using the key macro:
# key :field <, :another_field, :one_more ....>
end
https://github.com/bcsantos/translate/blob/master/app/models/amenity.rb
更改admin中的属性名称,使用此yml:
pt_br:
models:
amenity:
name: Complemento
attributes:
created_at: Criado em
updated_at: Actualizado em
name: Nome
description: Descrição
category: Categoria
price: Preço
phone: Telefone
medium: Meio
featured: Destacado
picture: Imagem
但并不自行翻译模型名称
https://github.com/bcsantos/translate/blob/master/app/locale/models/amenity/pt_br.yml
最后,
url('path')
不生成本地化网址,不是吗?
简而言之,
只有主页显示在前端;
图像路线被破坏;
admin 确实翻译用户的onterface和模型属性名称,但不会翻译模型名称,在菜单中;
答案 0 :(得分:1)
让我们试一试。一步一步。
你应该使用HEAD
padrino-contrib。从最新发布的稳定版(v0.1.13)到master
,它们似乎修复了许多关于auto_locale
的错误。
# Gemfile
gem "padrino-contrib", github: "padrino/padrino-contrib"
忘掉default_locale
。它用于旧版本。在I18n.locale=
中设置before_load
是正确的做法。
尽管如此,在使用auto_locale
时,此设置会被locales
变量中设置的first locale覆盖。它根本没有设置,defaults到en
。
也就是说,为了保持一致性,我将I18n.locale=
设置为locales
数组的第一个元素的相同值。如果它被其他图书馆使用,例如发电机。
使用上面的设置,switch_to_lang
按预期工作。它只是将传递的lang
参数附加到request.path_info
,从而生成:
# GET /admin
switch_to_lang(:en) # => /admin/en
是的,您可以在locale_exclusive_paths
中使用正则表达式,但要注意引用正则表达式会将其转换为String
。输入的padrino checks the type决定要排除的内容。
> "/foo/".is_a?(Regexp) # => false
> "/foo/".is_a?(String) # => true
> /foo/.is_a?(Regexp) # => true
> /foo/.is_a?(String) # => false
我从未使用过padrino-admin
,所以我对此无能为力。但您是否尝试过model_translate(或mt)视图助手?
最后,url
生成本地化的网址,但仅限于映射的路由,例如
# GET /en
# Suppose there is in your controller the following definition
# get :index { ... }
url("/") # => /
url(:index) # => /en
我真的希望有所帮助。 Padrino似乎是一个有趣的项目,但仍有改进的余地。如果您的项目变得更加复杂,即更多型号,控制器等,您可以考虑将其切换到轨道。
最佳!