Lokalisierung unter Raspbian - oder: Muss man denn...
-
- 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...
... 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.
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.
Re: Lokalisierung unter Raspbian - oder: Muss man denn...
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
Re: Lokalisierung unter Raspbian - oder: Muss man denn...
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
Vielleicht solltest du schauen, ob die C-Bibliothken auf dem Raspi aktuell sind.
Folgendes Programm gibt die aktuellen Einstellungen in den FormatSetting aus:
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.
-
- 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...
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.
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.
-
- 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...
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.
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.
-
- 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...
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
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- 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...
Ja genau sowas habe ich gesucht. Werde ich mal ausprobieren. Das muss in die Datei 10-cgi-conf, oder?
-
- 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...
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.
-
- 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...
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ß.
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
Michael Springwald