ngettext

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

ngettext

Beitrag von Scotty »

Ich will meinen Übersetzern die Möglichkeit für multiple Pluralformen geben. Allerdings gibt es für FPC/Lazarus keine ngettext-Funktion, nur eine gnadenlos veraltete Unit von Lars Dybdahl (dngettext). Das ohne viel Schnickschnack selbst zu machen, sollte aber nicht so schwer sein.

Wenn ich bei dngettext in den Quellcode sehe, finde ich fest kodierte Pluralformen:

Code: Alles auswählen

if (l2='en') or (l2='de') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm2EN else
if (l2='hu') or (l2='ko') or (l2='zh') or (l2='ja') or (l2='tr') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm1 else
if (l2='fr') or (l2='fa') or (lowercase(curlang)='pt_br') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm2FR else
if (l2='lv') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm3LV else
if (l2='ga') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm3GA else
if (l2='lt') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm3LT else
if (l2='ru') or (l2='cs') or (l2='sk') or (l2='uk') or (l2='hr') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm3RU else
if (l2='pl') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm3PL else
if (l2='sl') then curGetPluralForm:={$IFDEF FPC}@{$ENDIF}GetPluralForm4SL else begin
Widerspricht die vollständige, sprachbezogene Auflistung nicht dem po-file Header, in dem eine Art regulärer Ausdruck für die verwendeten Pluralformen angegeben wird? Dadurch wäre es ja egal, was im Header steht, nur die ID würde zählen. Außerdem müsste man im Code sicherstellen, dass alle Sprachen unterstützt werden. Macht man das wirklich so?

Code: Alles auswählen

Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : (n > 2 && n < 20) ? 2 : 3;n"

Antworten