2010-11-25 4 views
13

traduction de l'anglais vers le français par exempleQuelle est la meilleure façon de traduire une langue avec les sexes dans les rails

submit: 
    create: 'Create %{model}' 
    update: 'Update %{model}' 
    submit: 'Save %{model}' 

deviendrait

submit: 
     create: "Créer un(e) %{model}" 
     update: "Modifier ce(tte) %{model}" 
     submit: "Enregistrer ce(tte) %{model}" 

Quelle est la meilleure façon de mettre en œuvre le texte parenthèse (sexuée) pour travailler avec n'importe quel modèle passé. Merci!

+0

Je ne pense pas que le soutien I18n sexe en aucune façon. Il n'y a donc pas de solution intégrée automatique ... mais peut-être que je me trompe! – plehoux

+0

Les deux idées auxquelles je pensais étaient: définir le genre dans le modèle, puis le lire lors de la création du texte (certains lamba), OU créer une structure arborescente dans laquelle je remplacerais le texte pour les modèles qui ne fonctionnent pas. Je suppose que je ne suis pas la première personne à traduire une application rails, donc j'espère que cela a été résolu par quelqu'un d'une manière élégante. – montrealmike

Répondre

10

Il existe également un plug-in Rails i18n-inflector-rails qui permet d'enregistrer les méthodes dites d'inflexion dans les contrôleurs.

Ces méthodes alimentent de façon transparente l'I18n Inflector avec des données sur le genre ou toute autre forme d'inflexion que vous aimez.

Exemple:

fr: 
    i18n: 
    inflections: 
     gender: 
     h:  "hommes" 
     f:  "femmes" 
     n:  "neutre" 
     m:  @h 
     default: n 

    welcome: "@{h,n:Cher|f:Chère|Bonjour}{ }{h:Monsieur|f:Dame|n:Vous|à tous}" 

Et puis dans les contrôleurs:

class ApplicationController < ActionController::Base 

    before_filter :set_gender 

    inflection_method :gender 

    # inflection method for the kind gender 
    def gender 
    @gender 
    end 

    def set_gender 
    if user_signed_in?    # assuming Devise is in use 
     @gender = current_user.gender # assuming there is @gender attribute 
    else 
     @gender = nil 
    end 
    end 

end 

class UsersController < ApplicationController 

    def say_welcome 

    t('welcome') 

    # => "Cher Vous" (for empty gender or gender == :n) 
    # => "Chère Dame" (for gender == :f) 
    # etc. 

    end 

end 
Questions connexes