2012-08-29 14 views
9

Estoy trabajando con idiomas en R ails, y me pregunto cuál es la mejor práctica al escribir en mayúscula una palabra.¿Cuál es la mejor práctica para poner en mayúsculas las palabras en 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 señalar que las cosas del lenguaje pueden ser muy complejas muy rápido. Este es un ejemplo bastante simple. ¿Tienes algún caso de uso más realista? – tybro0103

Respuesta

21

El segundo tiene más posibilidades de estar en lo cierto. Cuándo capitalizar y cuándo no depende de la localidad, por lo que no puede saber si t(:hello).capitalize arrojará un resultado correcto sin mirar el contexto circundante. Un enfoque mejor que cualquiera sería incluir el contexto en el símbolo, algo como esto:

t(:hello_button) 

y luego en su YAML Inglés:

hello_button: "Hello" 

De esa manera las traducciones pueden utilizar cualquier caso es apropiado para el idioma en cuestión. Además, a veces el inglés usará la misma palabra para dos cosas cuando otros idiomas usarán palabras diferentes: considere naranja el color y naranja la fruta; de ahí la importancia del contexto en sus traducciones.

Además, capitalize solo funciona con caracteres ASCII a menos que usted lanza una mb_chars en la mezcla:

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

es posible que no se encuentran con un líder µ pero simples acentos en el principio de las palabras son bastante comunes:

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

Esto simplemente está arañando la superficie de las dificultades que enfrentará al asumir que todos los idiomas se comportan como en inglés. Solo espere hasta que tenga que comenzar a tratar con pluralization rules.

La regla básica en L10N es tratar las cadenas de usuario mirando como manchas opacas de datos que extrae de una base de datos de algún tipo y muestra al usuario sin manipulación intermedia. Sí, esto hace que el código sea más complicado, pero la corrección es algo importante.


Mientras estoy aquí, tratando de traducir palabras individuales tiende a producir un desastre incomprensible, tendrá mejores resultados si se traduce frases enteras.

3

El primero. No duplique sus datos con solo mayúsculas como la diferencia, simplemente hace que sea más difícil de mantener.

+6

Disculpe, no estoy de acuerdo con usted en eso, las mayúsculas dependen del contexto. –

+0

Claro, yo también estaba pensando en usar el primero. Pero mientras que el rendimiento es más caro para enviar un idioma var o utilizar el método para capitalizar? – Gabamnml

+1

@Gabamnml Ejecutar ''hello'.capitalize' 1,000,000 veces en mi máquina lleva 820ms. El pequeño golpe de rendimiento de hacer esto algunas veces por página no justifica el mantenimiento general. –

Cuestiones relacionadas