41 votes

Comment faire en sorte que Rails 3 localise mes formats de date?

Je suis en train de travailler sur un des Rails de 3 projet où il y a place pour la date de saisie dans un formulaire. Le champ de texte avec la date utilise un sélecteur de date, donc il n'y a aucune inquiétude à propos de la date en cours de saisie dans un mauvais format, mais la date est affichée dans l' :db format (par exemple, 2010-01-21).

(Note: c'est précisément dans les champs de formulaire - par exemple, <%= f.text_field :publish_date %>, ce qui devrait automatiquement utiliser :format par défaut, et ne devrait pas besoin d'être fourni avec une valeur)

J'ai essayé d'ajouter dans une mesure locale qui a la date suivante de configuration:

date:
    formats:
      # Use the strftime parameters for formats.
      # When no format has been given, it uses default.
      # You can provide other formats here if you like!
      default: "%d/%m/%Y"
      short: "%b %d"
      long: "%B %d, %Y"

Et puis la définition de mon paramètres régionaux à cette (config.i18n.default_locale = "en-AU") cependant, cela ne semble pas le prendre et de son devenir très frustrant.

Cette application pourra éventuellement prendre en charge un certain nombre de paramètres régionaux, de sorte que la configuration d'un initialiseur de remplacer les formats de date au démarrage de l'application n'est pas vraiment adapté, et je sais que ce doit travailler - je devine que j'ai raté quelque chose ici.

Les paramètres régionaux de fichier est: config/locales/en-AU.yml et dans mon application.rb je suis notamment:

config.i18n.load_path += Dir[Rails.root.join("config", "locales", "*.yml").to_s]
config.i18n.default_locale = "en-AU"

dans mon application.rb fichier.

85voto

Damien MATHIEU Points 13805

Lors de l'affichage d'une date, vous pouvez utiliser I18n.l

Alors tu ferais:

 I18n.l @entry.created_at
 

Et si vous voulez changer son format:

 I18n.l @entry.created_at, :format => :short
 

Le guide des rails d'internationalisation documente cela.

7voto

taelor Points 476

Découvrez le joyau de la délocalisation, il pourrait vous aider.

https://github.com/clemens/delocalize

http://www.railway.at/articles/2009/05/03/new-plugin-delocalize/

4voto

mkon Points 538

Ce que j'ai trouvé pour être la meilleure solution, c'est ceci:

  • Je localiser les formats de date dans mon fichier de paramètres régionaux, comme vous le faites
  • Dans mes formulaires, j'localiser la date par la mise en valeur directement

<%= f.text_field :publish_date, :value => (@model.publish_date.nil? ? nil : l(@model.publish_date)) %>

Il n'est pas parfait, malheureusement, mais au moins de cette façon que je peux utiliser mon formulaire pour les deux nouveaux et les dossiers existants. Également l'application restera compatible avec de multiples paramètres régionaux par rapport à l'évolution du format par défaut avec les initialiseurs. Si vous voulez pleinement pour se conformer à SEC, vous pouvez toujours écrire un helper personnalisé.

1voto

aguazales Points 886

Vous pourriez remplacer votre getters pour l' :publish_date d'attribut.

c'est à dire dans votre modèle:

def date( *format)
    self[:publish_date].strftime(format.first || default)
end

et dans votre vue, vous pourriez ne soit

@income.date("%d/%m/%Y")

ou

@income.date

Ce serait la cause de strftime pour utiliser la chaîne de format, à moins que c'était nul, auquel cas il devrait revenir à votre chaîne par défaut.

Remarque: j'ai utilisé le dossier de l'opérateur pour ajouter le support de la date de l'obtention sans argument. Il peut y avoir une manière plus propre de le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X