2012-08-29 6 views
9

Ich arbeite mit Sprachen in Rails, und ich frage mich, was die beste Praxis ist, wenn ein Wort großgeschrieben wird.Was ist die beste Methode, um Wörter in Rails groß zu schreiben?

en.yml:

hello: "hello" 

application.html.erb:

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

oder

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

Es ist erwähnenswert, dass Sprache Zeug sehr schnell sehr komplex werden kann. Dies ist ein ziemlich einfaches Beispiel. Haben Sie realistischere Anwendungsfälle? – tybro0103

Antwort

21

Der zweite hat eine bessere Chance, richtig zu sein. Wann das Groß- und Kleinschreibung zu berücksichtigen ist, hängt vom Gebietsschema ab, so dass Sie nicht wissen können, ob t(:hello).capitalize ein korrektes Ergebnis liefert, ohne den Kontext zu betrachten. Ein besserer Ansatz als entweder wäre den Kontext, in dem Symbol enthalten, etwa wie folgt:

t(:hello_button) 

und dann in Ihrem Englisch YAML:

hello_button: "Hello" 

auf diese Weise die Übersetzungen können je nachdem, was Fall ist angemessen für die betreffende Sprache. Auch wird Englisch manchmal dasselbe Wort für zwei Dinge verwenden, wenn andere Sprachen andere Wörter verwenden: Betrachten Orange die Farbe und Orange die Frucht; daher die Bedeutung von Kontext in Ihren Übersetzungen.

Außerdem capitalize funktioniert nur auf ASCII-Zeichen, wenn Sie eine mb_chars in den Mix zu werfen:

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

Sie könnten keine führende µ aber einfache Akzente am Anfang von Wörtern begegnen ziemlich häufig sind:

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

Dies ist nur kratzen die Oberfläche der Schwierigkeiten, denen Sie begegnen werden, unter der Annahme, dass alle Sprachen wie Englisch verhalten. Warte einfach, bis du mit pluralization rules anfangen musst.

Die Grundregel in L10N besteht darin, benutzerorientierte Strings als undurchsichtige Datenblobs zu behandeln, die Sie aus einer Datenbank irgendeiner Art herausziehen und dem Benutzer ohne Manipulationen dazwischen zeigen. Ja, das macht Ihren Code komplizierter, aber Korrektheit ist wichtig.


Während ich hier bin, einzelne Wörter zu übersetzen versucht, neigt dazu, eine unverständliche Chaos zu erzeugen, werden Sie bessere Ergebnisse, wenn Sie ganze Sätze übersetzen.

3

Die erste. Duplizieren Sie Ihre Daten nicht einfach mit Groß- und Kleinschreibung, da dies den Unterschied erschwert.

+6

Entschuldigung, ich muss Ihnen nicht zustimmen, die Groß- und Kleinschreibung hängt vom Kontext ab. –

+0

Sicher dachte ich auch daran, das erste zu verwenden. Aber während die Leistung teurer ist, um eine Sprache zu senden var oder verwenden Sie Methode, um zu kapitalisieren? – Gabamnml

+1

@Gabamnml Running '' hallo'.capitalize' 1.000.000 Mal auf meinem Rechner dauert 820ms. Die kleine Leistungseinbuße, dies einige Male pro Seite zu tun, ist den Wartungsaufwand nicht wert. –

Verwandte Themen