ruby on rails - multi - ¿Hay alguna solución para traducir unidades de medida en Rails?
rails translation interpolation (4)
Me gustaría implementar las preferencias de unidad de medida en una aplicación Ruby on Rails.
Por ejemplo, el usuario debería poder seleccionar entre mostrar distancias en millas o en kilómetros. Y, obviamente, no solo mostrar, sino también ingresar valores.
Supongo que todos los valores se deben almacenar en un sistema de medición global para simplificar los cálculos.
¿Hay alguna solución de lanzamiento para esto? ¿O debería escribir el mío?
La búsqueda rápida en GitHub mostró esto: http://github.com/collectiveidea/measurement
Parece que hace lo que necesita (en cuanto a la conversión entre unidades), pero no puedo decir que lo haya usado yo mismo.
Editar: La gema de Pierre parece que es más robusta y activa.
La gema rubí "ruby-units" puede ayudar:
http://ruby-units.rubyforge.org/ruby-units/
require ''rubygems''
require ''ruby-units''
''8.4 mi''.to(''km'') # => 13.3576 km
''8 lb 8 oz''.to(''kg'') # => 3.85554 kg
a = ''3 in''.to_unit
b = Unit(''5 cm'')
a + b # => 4.968 in
(a + b).to(''cm'') # => 16.62 cm
Tal vez puedas echar un vistazo a esta joya, que te permite realizar algunas conversiones de unidades.
Cantidad en Github
Creé Unitwise para resolver la mayoría de los problemas matemáticos de conversión y medición de unidades en Ruby.
El uso simple se ve así:
require ''unitwise/ext''
26.2.mile.convert_to(''km'')
# => #<Unitwise::Measurement 42.164897129794255 kilometer>
Si desea almacenar las medidas en sus modelos de Rails, podría hacer algo como esto:
class Race < ActiveRecord::Base
# Convert value to kilometer and store the number
def distance=(value)
super(value.convert_to("kilometer").to_f)
end
# Convert the database value to kilometer measurement when retrieved
def distance
super.convert_to(''kilometer'')
end
end
# Then you could do
five_k = Race.new(distance: 5)
five_k.distance
# => #<Unitwise::Measurement 5 kilometer>
marathon = Race.new(distance: 26.2.mile)
marathon.distance.convert_to(''foot'')
# => #<Unitwise::Measurement 138336.27667255333 foot>