Lokalisierung unter Raspbian - oder: Muss man denn...

Rund um die LCL und andere Komponenten
Antworten
Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von Timm Thaler »

... alles selber machen, Herrschaftszeiten.

Nachdem ich schon meinen Ärger mit falsch zugewiesenen Dezimaltrennern und Datumstrennern hatte, geht es jetzt mit der deutschen Sprache weiter.

Ich möchte einfach Monatsnamen im 3buchstabigen Format ausgeben. Also FormatDateTime('d. mmm', Now). Für Jan, Feb funktionierte das noch wunderbar, bei Mar stolperte ich mal kurz, Apr ging wieder, spätestens ab May war klar, hier stimmt mal wieder die Lokalisierung nicht.

Richtige Ländereinstellung auf dem Raspi? Check.
Welche Einstellung verwendet die Bash? Mai, Nov, Check.
Was sagt das Internet? Unit Clocale einbinden. Check. Trotzdem keine Änderung.

Ein Workaround wäre jetzt wie schon bei den Trennzeichen mit DefaultFormatSettings die Monatsnamen zu definieren. Aber das kann doch nicht Sinn der Sache sein, dass ich das selbst festlege. Dafür gibt es doch die Lokalisierung.

Wird das nur unter Raspbian so unbefriedigend gehandhabt, oder ist das ein generelles Problem unter Linux? Unter Windows kommen die deutschen Monatsnamen problemlos.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von theo »

Timm Thaler hat geschrieben:Wird das nur unter Raspbian so unbefriedigend gehandhabt, oder ist das ein generelles Problem unter Linux? Unter Windows kommen die deutschen Monatsnamen problemlos.


Hier geht das auch problemlos.
openSUSE Leap 42.2
Lazarus 1.9.0 r55180M FPC 3.0.2 x86_64-linux-gtk2

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von wp_xyz »

Ich hab keinen Raspi zur Verfügung, aber den zweiten Teil der Frage kann ich beantworten: Zumindest unter Mint18.1 funktionieren die Monatsnamen wie erwartet, sofern clocale eingebunden ist.

clocale holt sich die aktuellen Ländereinstellungen über einen Aufruf von

Code: Alles auswählen

function nl_langinfo(__item: cint):Pchar;cdecl;external clib name 'nl_langinfo';

Vielleicht solltest du schauen, ob die C-Bibliothken auf dem Raspi aktuell sind.

Folgendes Programm gibt die aktuellen Einstellungen in den FormatSetting aus:

Code: Alles auswählen

program Project1;
 
{$mode objfpc}{$H+}
 
uses
  clocale, sysutils;
 
var
  i: Integer;
begin
  with DefaultFormatSettings do begin
    WriteLn('DecimalSeparator: ', DecimalSeparator);
    WriteLn('ThousandSeparator: ', ThousandSeparator);
    WriteLn('DateSeparator: ', DateSeparator);
    WriteLn('TimeSeparator: ', TimeSeparator);
    WriteLn('ListSeparator: ', ListSeparator);
    WriteLn('CurrencyString: ', CurrencyString);
    WriteLn('ShortDateFormat: ', ShortDateFormat);
    WriteLn('LongDateFormat: ', LongDateFormat);
    WriteLn('ShortTimeFormat: ', ShortTimeFormat);
    WriteLn('LongTimeFormat: ', LongTimeFormat);
    WriteLn('TimeAMString: ', TimeAMString);
    WriteLn('TimePMString: ', TimePMString);
    WriteLn('Short/LongMonthNames: ');
    for i:=1 to 12 do WriteLn('  ', ShortMonthnames[i], '   ', LongMonthNames[i]);
    WriteLn('Short/LongDayNames:');
    for i:=1 to 7 do WriteLn('  ', ShortDaynames[i], '   ', LongDayNames[i]);
  end;
end.
Dateianhänge
FormatSettings.png

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von Timm Thaler »

Ahhhh, PEBKAC!

Nach einigem Rumprobieren habe ich herausgefunden: Mit "clocale" werden durchaus die richtigen Spracheinstellungen verwendet - aber nur für den angemeldeten Benutzer.

Nun soll das Programm aber als cgi-binary unter Lighttpd Ausgaben an externe Webseiten erzeugen. Und da läuft es vermutlich als Benutzer www-data - und der übernimmt offenbar die Lokalisierung des Raspberry nicht. Ich bin bisher davon ausgegangen, dass ich die Lokalisierung global einstelle.

Jetzt muss ich also irgendwie den User www-data oder lighttpd auf german umstellen.

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von Timm Thaler »

Nochmal ahhhh! Ich finde einfach keine Möglichkeit, wie ich dem User www-data beibringe, dass er die Ländereinstellungen des Raspis übernehmen soll.

Geht das prinzipiell nicht oder stelle ich mich nur zu blöd an? Nach meinen bisherigen Recherchen sollten alle User ausser Root die Einstellungen haben. Und es gibt auch keinen "Schalter" für Lighttpd um da irgendwelche Ländereinstellungen festzulegen. Für PHP gibt es das anscheinend, aber mit PHP hat mein Programm nun gar nichts zu tun.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von Socke »

Timm Thaler hat geschrieben:Nochmal ahhhh! Ich finde einfach keine Möglichkeit, wie ich dem User www-data beibringe, dass er die Ländereinstellungen des Raspis übernehmen soll.

Geht das prinzipiell nicht oder stelle ich mich nur zu blöd an? Nach meinen bisherigen Recherchen sollten alle User ausser Root die Einstellungen haben. Und es gibt auch keinen "Schalter" für Lighttpd um da irgendwelche Ländereinstellungen festzulegen. Für PHP gibt es das anscheinend, aber mit PHP hat mein Programm nun gar nichts zu tun.

Bei Lighttp kannst du die Umgebungsvariablen ändern: https://redmine.lighttpd.net/projects/1 ... ocs_modcgi

Code: Alles auswählen

setenv.set-environment = ( "LC_ALL" => "de_DE.utf-8" )
setenv.set-environment = ( "LANG" => "de_DE.utf-8" )


Alternativ kannst du auch in deinem Programm die Lokalisierung vorgeben; dazu müsstes du dir den Code der Unit clocale in eine eigene Unit kopieren und in der Prozedur GetFormatSettings beim Aufruf der Prozedur setlocale(__LC_ALL,'') in z.B. setlocale(__LC_ALL,'sk_SK.utf-8') (je nach gewünschter Sprache) ändern.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von Timm Thaler »

Ja genau sowas habe ich gesucht. Werde ich mal ausprobieren. Das muss in die Datei 10-cgi-conf, oder?

Timm Thaler
Beiträge: 1224
Registriert: So 20. Mär 2016, 22:14
OS, Lazarus, FPC: Win7-64bit Laz1.9.0 FPC3.1.1 für Win, RPi, AVR embedded
CPU-Target: Raspberry Pi 3

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von Timm Thaler »

Code: Alles auswählen

setenv.[b]add[/b]-environment = ( "LC_ALL" => "de_DE.utf-8" )
setenv.set-environment = ( "LANG" => "de_DE.utf-8" )


LC_ALL muss mit ADD zugefügt werden, sonst geht die Konfig nicht. Allerdings funktioniert es dennoch nicht, es werden weiterhin die englischen Monate ausgegeben.

Ich mach das jetzt von Hand, hab Besseres zu tun als mich mit der Konfig rumzuärgern.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Lokalisierung unter Raspbian - oder: Muss man denn...

Beitrag von pluto »

Ich ändere einfach jedesmal die Bezeichnungen für die Monats namen. Das ist das einfachste im Moment.
Das sind ca 4 Array's die man einfach in der eigenen Anwendung ändern kann.

Bei mir hat es noch NIE automatisch geklappt, dass ein Lazarus Programm Automatisch die Deutschen Monats oder Tages Namen angezeigt hat.
Früher hatte ich auch noch mal eine Datei einfach in mein Soruce-Code Verzeichnis kopiert. Weiß aber gerade nicht mehr wie die hieß.
MFG
Michael Springwald

Antworten