AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

gettext sucht nur im default.mo

Ein Thema von charly52 · begonnen am 18. Jun 2020 · letzter Beitrag vom 2. Jul 2020
Antwort Antwort
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.735 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

AW: gettext sucht nur im default.mo

  Alt 19. Jun 2020, 08:51
Ich benutze ein gnugettext.pas welches bei den Tools von J.Rathlev dabei war. Der letzte Eintrag im Header:

Delphi-Quellcode:
// Changes J. Rathlev (kontakt(a)rathlev-home.de)
// see: JR - 2011-07-29 / 2012-09-10
// All Delphi version related compiler switches removed - needs at least Delphi XE2

// Information about this file:
// $LastChangedDate: 2010-08-25 15:40:17 +0200 (mer., 25 août 2010) $
// $LastChangedRevision: 220 $
// $HeadURL: http://svn.berlios.de/svnroot/repos/dxgettext/trunk/dxgettext/sample/gnugettext.pas $
Die Version ist uralt, aber an der prinzipiellen Verwendung hat sich nichts geändert.

Die aktuelle Version gibt's auf Sourceforge

https://svn.code.sf.net/p/dxgettext/...gnugettext.pas

und im Programm sieht es so aus
Delphi-Quellcode:
 

unit XXXX_Help; Das ist aber KEIN Formular!!!!!

procedure Do_TiPoolTimer(Sender: TObject; Ident: Word; Counter: Integer; projAktiv: Boolean);
begin
  etwas code
 
  txt:= FormatDateTime(_('mm/dd/yyyy'),Now)+' '+FormatDateTime(_('hh:mm AM/PM'),Now);
end;

ich hoffe jetzt sind die Randbedinungen alle bekannt?

Und noch die grundsätzliche Frage zu meinem Problem:
Wenn ich dem System mehrere Domains bekannt mache, wird dann von _(xxx) automatisch in allen gesucht, oder sollte zumindest in allen gesucht werden?
Wenn JR da nichts grundlegendes geändert hat, wird für direkte gettext() bzw. _()-Aurufe nicht automatisch in allen Domains gesucht sondern nur in der jeweils aktiven (Standard: "default"). In allen Domains suchen passiert nur für RessourceStrings, und auch da nur in denen die mit RegisterDomainForRessourceString registriert wurden.

Man kann natürlich selbst eine _()-Funktion schreiben, die mittels DGetText alle Domains durchgeht, bis eine Übersetzung geliefert wird:

Delphi-Quellcode:
function _(const _s: string): string;
begin
  Result := gettext(_s);
  if Result = _s then begin
    Result := dgettext(_s, domain1);
    if Result = _s then begin
      Result := dgettext(_s, domain2);
      // usw. fuer weitere Domains.
    end;
  end;
end;
Diese muss man dann aber in eine Unit packen, in der sie vor der Funktion in gnugetext.pas gefunden wird.

Am besten dupliziert man die Funktionen aus gnugetext, die man benutzt, (also in der Regel _() und TranslateComponent) in eine eigene Unit mytranslation und bindet nur in dieser Unit gnugettext ein, in allen anderen benutzt man mytranslation statt gnugettext, so dass man sicher ist, welche _()-Funktion aufgerufen wird.
Thomas Mueller
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: gettext sucht nur im default.mo

  Alt 23. Jun 2020, 10:22
Hi

erstmal sorry für die späte Antwort.
Da gabs ja mal richtig viel Info. Danke!


Zitat:
Wenn JR da nichts grundlegendes geändert hat, wird für direkte gettext() bzw. _()-Aurufe nicht automatisch in allen Domains gesucht sondern nur in der jeweils aktiven (Standard: "default"). In allen Domains suchen passiert nur für RessourceStrings, und auch da nur in denen die mit RegisterDomainForRessourceString registriert wurden.
Dann verstehe ich den Sinn von
AddDomainForComponent('Base');
aber garnicht. Oder wirkt das wiederum nur bei TranslateComponent(self) ?

Vieleicht sollte ich mich doch mal mit der gnugettext befassen.

Gruß Charly
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.735 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: gettext sucht nur im default.mo

  Alt 23. Jun 2020, 11:51
Hi

erstmal sorry für die späte Antwort.
Da gabs ja mal richtig viel Info. Danke!


Zitat:
Wenn JR da nichts grundlegendes geändert hat, wird für direkte gettext() bzw. _()-Aurufe nicht automatisch in allen Domains gesucht sondern nur in der jeweils aktiven (Standard: "default"). In allen Domains suchen passiert nur für RessourceStrings, und auch da nur in denen die mit RegisterDomainForRessourceString registriert wurden.
Dann verstehe ich den Sinn von
AddDomainForComponent('Base');
aber garnicht. Oder wirkt das wiederum nur bei TranslateComponent(self) ?

Vieleicht sollte ich mich doch mal mit der gnugettext befassen.
Wie sagte meine Mutter immer so schön: "Man wird alt wie eine Kuh und lernt immernoch dazu." AddDomainForComponent war mir bisher nicht bekannt. Der Kommentar zumindest lässt erstmal vermuten, dass das genau das ist, was Du suchst:

Delphi-Quellcode:
// Add more domains that component strings can be extracted from. If a translation
// is not found in the default domain, this domain will be searched, too.
// This is useful when an application inherits components from a 3rd
// party component libraries
procedure AddDomainForComponent (const domain:DomainString);
procedure RemoveDomainForComponent (const domain:DomainString);
Wenn man dann mal nachschaut, was die Prozedur macht, nämlich eine Domain zur Liste ComponentDomainList hinzufügen, stellt man fest, dass das auch nicht hilft. Diese Liste wird nur in ComponentGetText verwendet, dies wiederum wird nur aufgerufen, wenn eine Property übersetzt wird, welches wiederum nur aus TranslateComponent aufgerufen wird.

Mit anderen Worten: Nein, wieder kein Blumenstrauß.
Thomas Mueller
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: gettext sucht nur im default.mo

  Alt 23. Jun 2020, 15:37
Hallo

vielen Dank trotzdem.

Ich wühle gerade in diversen gnugettext herum.
Es gibt auch noch was von git (jvgnugettext.pas)
und wohl diverse Varianten von dem im SVN.
Wäre es nicht sinnvoll wieder den Header zu pflegen?
So mit Änderungsdatum usw.

schönen Gruß charly
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.735 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: gettext sucht nur im default.mo

  Alt 23. Jun 2020, 19:21
Ich wühle gerade in diversen gnugettext herum.
Es gibt auch noch was von git (jvgnugettext.pas)
und wohl diverse Varianten von dem im SVN.
Wäre es nicht sinnvoll wieder den Header zu pflegen?
So mit Änderungsdatum usw.
Wenn es noch jemanden gäbe, der sich dafür zuständig fühlte, vielleicht. Den gibt es aber nicht. Lars Dybahl, der eigentliche Maintainer und Betreiber der jeweiligen Webseiten, ist anscheinend nicht mehr besonders interessiert.

Das Projekt wäre schon länger tot, wenn ich nicht noch Schreibzugriff auf das SVN Repository hätte und je nach Lust und Laune mal Bugs fixe (in der Regel nur, wenn mir jemand einen Patch zukommen lässt, oder wenn ich selbst betroffen bin) oder es an neue Delphi-Versionen anpasse. Und ich habe ehrlich gesagt keinen Bock für dieses Projekt auf solche Formalismen zu achten.
Thomas Mueller
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

AW: gettext sucht nur im default.mo

  Alt 29. Jun 2020, 19:09
Problem gelöst!

Delphi-Quellcode:
function TGnuGettextInstance.gettext(
  const szMsgId: MsgIdString): TranslatedUnicodeString;
var
  domain: DomainString;
  domainIndex: Integer;
begin
  Result := dgettext(curmsgdomain, szMsgId);
  if SearchAllDomains and (szMsgId <> '') then begin <------------- !!!!
    domainIndex := 0;
    while (Result = szMsgId) and (domainIndex < domainlist.count) do begin
      domain := domainlist[domainIndex];
      Result := dgettext(domain, szMsgId);
      Inc(domainIndex);
    end;
  end;
end;
So banal, daß man sich schon fast schämen muß

Im xxxx.dpr DefaultInstance.SearchAllDomains:= TRUE; setzen


Und wer setzt jetzt die "offene Frage" zurück?

Schöne Grüße

Charly
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.735 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: gettext sucht nur im default.mo

  Alt 30. Jun 2020, 10:17
Problem gelöst!

DefaultInstance.SearchAllDomains:= TRUE; setzen
Das sollte mir jetzt peinlich sein. Ich bin immer wieder mal überrascht, was diese "unscheinbare" Unit alles an Funktionalität birgt. Komisch ist allerdings, dass man diese Einstellung in der Instanz machen muss. Alles andere geht auch über globale Variablen.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.579 Beiträge
 
Delphi 12 Athens
 
#8

AW: gettext sucht nur im default.mo

  Alt 29. Jun 2020, 19:28
In den JEDI gibt es doch auch noch ein GnuGetText?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
charly52

Registriert seit: 2. Sep 2018
Ort: Salem, Baden
102 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: gettext sucht nur im default.mo

  Alt 30. Jun 2020, 08:08
Hi


In den JEDI gibt es doch auch noch ein GnuGetText?
Das ist ja ein Teil meines Problems. Es gibt zu viele GnuGettexte.

Im JEDI habe ich https://sourceforge.net/p/dxgettext/...gnugettext.pas gefunden.
Das ist genau das was auch im SVN https://svn.code.sf.net/p/dxgettext/...gnugettext.pas
steht.

Dann habe ich vor längerem schon mal was bei JEDI gefunden was aber stark von den anderen beiden abweicht.
Hat auch einen eigenen Text im Header von wegen Anpassungen und Namensänderung die JEDI gemacht hat.
Delphi-Quellcode:
{*------------------------------------------------------------------------------
  GNU gettext translation system for Delphi, Kylix, C++ Builder and others.
  All parts of the translation system are kept in this unit.
  @author Lars B. Dybdahl and others
  @version $LastChangedRevision$
  @see http://dybdahl.dk/dxgettext/
-------------------------------------------------------------------------------}

unit JvGnugettext;
(**************************************************************)
(*                                                            *)
(*  (C) Copyright by Lars B. Dybdahl and others               *)
(*  E-mail: Lars@dybdahl.dk, phone +45 70201241               *)
(*                                                            *)
(*  Contributors: Peter Thornqvist, Troy Wolbrink,            *)
(*                Frank Andreas de Groot, Igor Siticov,       *)
(*                Jacques Garcia Vazquez, Igor Gitman,        *)
(*                Arvid Winkelsdorf, Andreas Hausladen,       *)
(*                Olivier Sannier                             *)
(*                                                            *)
(*  See http://dybdahl.dk/dxgettext/ for more information     *)
(*                                                            *)
(**************************************************************)

{*------------------------------------------------------------------------------
  NOTE ON JVCL INTEGRATION:
 
  The original file name is "gnugexttext.pas" but has been renamed to
  JvGnugettext.pas so as to not conflict with other packages that might
  use the gnugettext.pas file directly
  In order to ease the synchronization with the public version of
  gnugettext.pas the style guide for the JVCL is not enforced here.
------------------------------------------------------------------------------*}
Die Version finde ich aber garnicht mehr.
Ich blick halt in der JEDI / git - Umgebung auch nicht so richtig durch.
Vieleicht weis der Thomas Müller ja noch was dazu, der committed da öfters was.

Ich verwende jetzt die Version aus dem SVN-Link.


Ciao Charly
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz