[ruby-de] Zahlen mit Komma und Sonderzeichen

Marvin Gülker m-guelker at phoenixmail.de
Di Apr 18 20:13:06 JST 2017


On Tue, Apr 18, 2017 at 07:38:34PM +0900, Martin J. Dürst wrote:
> Das würde bedeuten, das ein und dasselbe Programm in verschiedenen
> Umgebungen verschiedene Eingaben akzeptieren (oder zurückweisen) würde, und
> verschiedene Ausgaben erzeugen würde, die dann von einem anderen Programm
> (oder demselben Programm in anderer Umgebung) nicht mehr gelesen werden
> könnten.

Das ist richtig und das erwartete Verhalten. Es handelt sich insoweit um
Programm-Internationalisierung; je nach Nutzer soll es sich so
verhalten, wie die Umgebung des Nutzers es angibt.

Ich gebe dir Recht, dass das eine desktop-zentrische Ansicht ist und für
Webseiten unpassend ist, allerdings ist das
LC-Umgsbungsvariablen-Konzept auch nicht auf Webseiten abgestimmt. Die
Beachtung der LC-Umgebungsvariablen ist allerdings wenigstens
POSIX-konform, wohingegen der Locale-Parameter eine Ergänzung des
Ruby-Kerns letztlich speziell nur für Web-Zwecke wäre. Eine solche
Ergänzung ist aber m.E. eine Frage für ein Gem, nicht für den
Ruby-Kern. Tatsächlich bieten die gängigen Internationalisierungs-Gems
(i18n, r18n) auch genau dafür Methoden an.

> Ich bin auch nicht sicher, dass es sinnvoll ist, ein Ruby-Programm überall
> mit Locale-Parametern vollzustopfen. Aber alles einfach nur von LANG und so
> abhängig zu machen scheint auch nicht die optimale Lösung. Vielleicht gibt
> es da noch etwas dazwischen.

Ich denke, dein Vorschlag in #13309 mit einer Locale-Klasse ist gar
nicht so falsch. Damit könnte ein Programm auf die verschiedenen
verfügbaren Locales zugreifen und aus ihnen nach Bedarf auswählen. Man
könnte sich daran orientieren, wie C/C++ Locales handhaben.

> So weit ich es verstehe, gibt es mindestens zwei Ziele für die Ausgabe:
> Daten-Files, die ausgetauscht und wieder gelesen werden sollen (wo eine
> "neutrale", also Amerikanisch-Englische Formatierung am besten geht)

Dafür ist LC_ALL=C da, welches die gesamten anderen LC-Variablen mit
einem neutralen, US-amerikanisch-orientierten Format überschreibt und
welches man temporär setzen kann (oder in einem C-Programm per
setlocale(LC_ALL, "C") innerhalb des Programms setzt).

Viele Grüße
Marvin

-- 
Blog: https://www.guelkerdev.de
PGP/GPG ID: F1D8799FBCC8BC4F


Mehr Informationen über die Mailingliste ruby-de