2012-08-29 2 views
9

Sto lavorando con le lingue in inglese, e mi chiedo quale sia la migliore pratica per capitalizzare una parola.Qual è la migliore pratica per capitalizzare le parole in Rails?

en.yml:

hello: "hello" 

application.html.erb:

<%= link_to t(:hello).capitalize, hello_path %> (with capitalization) 
<%= link_to t(:hello), hello_path %> (without capitalization) 

o

en.yml:

Hello: "Hello" 
hello: "hello" 

application.html.erb:

<%= link_to t(:Hello), hello_path %> (with capitalization) 
<%= link_to t(:hello), hello_path %> (without capitalization) 
+2

Vale la pena notare che il linguaggio può diventare molto complesso molto velocemente. Questo è un esempio piuttosto semplice. Avete casi d'uso più realistici? – tybro0103

risposta

21

Il secondo ha una migliore possibilità di essere corretto. Quando capitalizzare e quando non dipende dal locale in modo da non poter sapere se t(:hello).capitalize produrrà un risultato corretto senza guardare il contesto circostante. Un approccio migliore rispetto sia sarebbe quella di includere il contesto nel simbolo, qualcosa di simile:

t(:hello_button) 

e poi nel tuo inglese YAML:

hello_button: "Hello" 

In questo modo le traduzioni possono utilizzare qualsiasi caso è appropriato per la lingua in questione. Inoltre, a volte l'inglese usa la stessa parola per due cose quando altre lingue usano parole diverse: considera arancione il colore e arancione il frutto; da qui l'importanza del contesto nelle tue traduzioni.

Inoltre, capitalize funziona solo su caratteri ASCII a meno che non si passi un mb_chars nel mix:

> 'µ'.capitalize 
=> "µ" 
> 'µ'.mb_chars.capitalize.to_s 
=> "Μ" 

non si potrebbe incontrare un leader µ ma semplici accenti all'inizio delle parole sono abbastanza comuni:

> 'éclair'.capitalize 
=> "éclair" 
> 'éclair'.mb_chars.capitalize.to_s 
=> "Éclair" 

Questo è solo graffiare la superficie delle difficoltà che dovrai affrontare assumendo che tutte le lingue si comportino come l'inglese. Attendi fino a quando non inizi a occuparti di pluralization rules.

La regola di base in L10N è di trattare le stringhe rivolte all'utente come bit di dati opachi che estraggono da un database di qualche tipo e mostrano all'utente senza alcuna interazione intermedia. Sì, questo rende il tuo codice più complicato ma la correttezza è un po 'importante.


Mentre io sono qui, il tentativo di tradurre singole parole tende a produrre un pasticcio incomprensibile, avrai risultati migliori se si traduce intere frasi.

3

Il primo. Non duplicare i tuoi dati con la sola maiuscola come differenza, ma rende più difficile la manutenzione.

+6

Mi dispiace, non sono d'accordo con te su questo, la capitalizzazione dipende dal contesto. –

+0

Certo, stavo anche pensando di usare il primo. Ma mentre le prestazioni sono più costose per inviare una lingua var o usare il metodo per capitalizzare? – Gabamnml

+1

@Gabamnml Running ''hello'.capitalize' 1.000.000 di volte sulla mia macchina richiede 820ms. Il piccolo calo di prestazioni di questo processo poche volte per pagina non vale la spesa di manutenzione. –