Jelajahi Sumber

Removed gnuGettext

glscene 5 bulan lalu
induk
melakukan
3c42a51748
30 mengubah file dengan 111 tambahan dan 12497 penghapusan
  1. 3 4
      Examples/AdvDemos/GLSViewer/GLSViewerD.dpr
  2. 7 2
      Examples/AdvDemos/GLSViewer/GLSViewerD.dproj
  3. 0 613
      Examples/AdvDemos/GLSViewer/Locale/en/LC_MESSAGES/default.po
  4. 0 66
      Examples/AdvDemos/GLSViewer/Locale/en/LC_MESSAGES/languages.po
  5. 0 30
      Examples/AdvDemos/GLSViewer/Locale/readme.txt
  6. TEMPAT SAMPAH
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/default.mo
  7. 0 1631
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/default.po
  8. TEMPAT SAMPAH
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/examples.mo
  9. 0 89
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/examples.po
  10. TEMPAT SAMPAH
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/glsviewer.mo
  11. 0 1335
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/glsviewer.po
  12. TEMPAT SAMPAH
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/languages.mo
  13. 0 67
      Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/languages.po
  14. 0 1
      Examples/AdvDemos/GLSViewer/Source/fGLForm.dfm
  15. 4 61
      Examples/AdvDemos/GLSViewer/Source/fGLForm.pas
  16. 8 27
      Examples/AdvDemos/GLSViewer/Source/fGLOptions.dfm
  17. 6 32
      Examples/AdvDemos/GLSViewer/Source/fGLOptions.pas
  18. 6 12
      Examples/AdvDemos/GLSViewer/Source/fGLSViewer.dfm
  19. 70 72
      Examples/AdvDemos/GLSViewer/Source/fGLSViewer.pas
  20. 0 28
      Examples/AdvDemos/GLSViewer/Source/ggexclude.cfg
  21. 0 4433
      Examples/AdvDemos/GLSViewer/Source/gnugettext.pas
  22. 2 4
      Examples/AdvDemos/GLSViewer/Source/uGlobals.pas
  23. 5 7
      Examples/AdvDemos/GLSViewer/Source/uSettings.pas
  24. 0 23
      Examples/AdvDemos/GLSViewer/_getpo_ru.cmd
  25. 0 1
      Externals/Luxophia/include/#include.txt
  26. 0 1
      Externals/Luxophia/lib/#libs.txt
  27. 0 2
      Packages/GLScene_RT.dpk
  28. 0 2
      Packages/GLScene_RT.dproj
  29. 0 3913
      Src/gnuGettext.pas
  30. 0 41
      Src/gnuGettextInit.pas

+ 3 - 4
Examples/AdvDemos/GLSViewer/GLSViewerD.dpr

@@ -4,21 +4,20 @@ uses
   Forms,
   fGLForm in 'Source\fGLForm.pas' {GLForm},
   fGLDialog in 'Source\fGLDialog.pas' {GLDialog},
-  fGLSViewer in 'Source\fGLSViewer.pas' {FormGLSViewer},
+  fGLSViewer in 'Source\fGLSViewer.pas' {frmGLSViewer},
   uGlobals in 'Source\uGlobals.pas',
   uSettings in 'Source\uSettings.pas',
   dImages in 'Source\dImages.pas' {dmImages: TDataModule},
   fGLAbout in 'Source\fGLAbout.pas' {GLAbout},
   fGLOptions in 'Source\fGLOptions.pas' {FormOptions},
-  dDialogs in 'Source\dDialogs.pas' {dmDialogs: TDataModule},
-  gnugettext in 'Source\gnugettext.pas';
+  dDialogs in 'Source\dDialogs.pas' {dmDialogs: TDataModule};
 
 {$R *.res}
 
 begin
  // Application.Initialize;
  // Application.Title := 'GLSViewer';
-  Application.CreateForm(TFormGLSViewer, FormGLSViewer);
+  Application.CreateForm(TfrmGLSViewer, frmGLSViewer);
   Application.CreateForm(TdmImages, dmImages);
   Application.CreateForm(TdmDialogs, dmDialogs);
   Application.Run;

+ 7 - 2
Examples/AdvDemos/GLSViewer/GLSViewerD.dproj

@@ -135,7 +135,7 @@
             <Form>GLDialog</Form>
         </DCCReference>
         <DCCReference Include="Source\fGLSViewer.pas">
-            <Form>FormGLSViewer</Form>
+            <Form>frmGLSViewer</Form>
         </DCCReference>
         <DCCReference Include="Source\uGlobals.pas"/>
         <DCCReference Include="Source\uSettings.pas"/>
@@ -154,7 +154,6 @@
             <FormType>dfm</FormType>
             <DesignClass>TDataModule</DesignClass>
         </DCCReference>
-        <DCCReference Include="Source\gnugettext.pas"/>
         <BuildConfiguration Include="Base">
             <Key>Base</Key>
         </BuildConfiguration>
@@ -191,6 +190,12 @@
             </Platforms>
             <Deployment Version="5">
                 <DeployFile LocalName="GLSViewerD.exe" Configuration="Debug" Class="ProjectOutput"/>
+                <DeployFile LocalName="GLSViewerD.exe" Configuration="Debug" Class="ProjectOutput">
+                    <Platform Name="Win32">
+                        <RemoteName>GLSViewerD.exe</RemoteName>
+                        <Overwrite>true</Overwrite>
+                    </Platform>
+                </DeployFile>
                 <DeployClass Name="AdditionalDebugSymbols">
                     <Platform Name="iOSSimulator">
                         <Operation>1</Operation>

+ 0 - 613
Examples/AdvDemos/GLSViewer/Locale/en/LC_MESSAGES/default.po

@@ -1,613 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2024-06-02 13:33\n"
-"PO-Revision-Date: 2024-06-04 16:33+0300\n"
-"Last-Translator: Somebody <[email protected]>\n"
-"Language-Team: \n"
-"Language: en_US\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 3.4.4\n"
-
-
-#. FormAbout..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:9
-msgid "About"
-msgstr ""
-
-#. FormAbout..Font.Name
-#. FormAbout..Panel1..Font.Name
-#. FormAbout..PageControl..tsInfo..Panel2..Font.Name
-#. FormGalaktika..Font.Name
-#. FormGalaktika..PageControl1..tsDatacat..DBGrid..TitleFont.Name
-#. FormGL..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbEquals..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult1..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult2..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult3..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult4..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbDivide..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..Label1..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..ButtonCalculate..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditLc..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditLs..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditNs..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditNc..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..nbFl..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..nbFb..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..nbFn..Font.Name
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..nbDc..Font.Name
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:16
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:36
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:73
-#: D:/ASTRONOMY/AstrobloQ/src/fGalaktika.dfm:15
-#: D:/ASTRONOMY/AstrobloQ/src/fGalaktika.dfm:783
-#: D:/ASTRONOMY/AstrobloQ/src/fGLForm.dfm:11
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:413
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:440
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:457
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:474
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:491
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:508
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:526
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:545
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:563
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:582
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:602
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:623
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:644
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:679
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:701
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:723
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:772
-msgid "Segoe UI"
-msgstr ""
-
-#. FormAbout..Panel1..Caption
-#. FormGalaktika..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:32
-#: D:/ASTRONOMY/AstrobloQ/src/fGalaktika.dfm:8
-msgid "Galaktika"
-msgstr ""
-
-#. FormAbout..PageControl..tsInfo..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:58
-msgid "Info"
-msgstr ""
-
-#. FormAbout..PageControl..tsInfo..Panel2..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:69
-msgid "v. 0.1"
-msgstr ""
-
-#. FormAbout..PageControl..tsTools..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:56223
-msgid "Tools"
-msgstr ""
-
-#. FormAbout..PageControl..tsTools..DelphiButton..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:56231
-msgid "www.github.com"
-msgstr ""
-
-#. FormAbout..PageControl..tsTools..OGLImage..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:56354
-msgid "www.opengl.org"
-msgstr ""
-
-#. FormAbout..PageControl..tsTools..GLSImage..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:56413
-msgid "www.glscene.org"
-msgstr ""
-
-#. FormAbout..PageControl..tsDevelopers..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:63724
-msgid "Developers"
-msgstr ""
-
-#. FormAbout..PageControl..tsDevelopers..MemoDevelopers....Lines.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:63739
-msgid "Pavel Vassiliev"
-msgstr ""
-
-#. FormAbout..PageControl..tsDevelopers..MemoDevelopers....Lines.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:63740
-msgid "Lev Koptyaev"
-msgstr ""
-
-#. FormAbout..PageControl..tsDevelopers..MemoDevelopers....Lines.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fAbout.dfm:63741
-msgid "Danil Wasilyev"
-msgstr ""
-
-
-#. FormSettings..PanelBottom..ButtonOk..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:46
-msgid "Ok"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:117
-msgid "Interface"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..LabelProgram..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:129
-msgid "Location"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..LabelData..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:141
-msgid "Database"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..PanelExePath..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:154
-msgid "AstrobloQ.exe"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..ButtonBrowsePathData..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:175
-msgid "Browse|Browse the directory"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..ButtonBrowsePathData..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:180
-msgid "..."
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..CheckBoxLoadProject..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:194
-msgid "Loading at start"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..CheckBoxSaveProject..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:208
-msgid "Save on exit"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..cbSplashStart..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:222
-msgid "Show splash"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..rgLanguages..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:230
-msgid "Language"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..rgLanguages....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:234
-msgid "English"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsInterface..rgLanguages....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:235
-msgid "Russian"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsDisplay..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:245
-msgid "Display"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsDisplay..LabelBackground..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:257
-msgid "Background"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsDisplay..CheckBoxAxis..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:268
-msgid "Axis"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsDisplay..PanelBkg..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:278
-msgid "Click to change background colour"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsDisplay..CheckBoxCoordinates..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:298
-msgid "Coordinates"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsDisplay..cbxTwoSideLighting..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:312
-msgid "Twoside lighting"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsMaterial..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:321
-msgid "Material"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsMaterial..ListView......Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:336
-msgid "Model"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsMaterial..ListView......Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:343
-msgid "Table"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsMaterial..ButtonModifyMat..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:362
-msgid "Change..."
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:371
-msgid "Galaxy"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..LabelDiameter..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:383
-msgid "Radius"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:409
-msgid "Drake formula"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbEquals..Caption
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..StaticText2..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:436
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:755
-msgid "="
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult1..Caption
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult2..Caption
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult3..Caption
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbMult4..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:453
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:470
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:487
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:504
-msgid "*"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..lbDivide..Caption
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..Label1..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:521
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:540
-msgid "/"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..ButtonCalculate..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:559
-msgid "Calculate"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditLc..TextHint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:587
-msgid "Avarage life time for civilisation"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditLs..Text
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:606
-msgid "10000000000"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditLs..TextHint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:607
-msgid "Mean lifitime for planet"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditNs..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:614
-msgid "Number of stars in MW"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditNs..Text
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:627
-msgid "400000000000"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..EditNc..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:634
-msgid "Number os noospheres"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..StaticTextFl..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:656
-msgid "Fraction of stars with lithospheres"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..StaticTextFl..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:661
-msgid "Fl"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..StaticTextDc..Hint
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..StaticText2..Hint
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextNc..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:737
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:750
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:789
-msgid "Number of noospheres"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..StaticTextDc..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:742
-msgid "Dc"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..PanelDrake..nbDc..Hint
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..LabelDistance..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:763
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1135
-msgid "Distance"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextNc..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:794
-msgid "Nc"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextNs..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:802
-msgid "Number of galaxy stars"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextNs..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:807
-msgid "Ns"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextFb..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:817
-msgid "Fraction of planets with biospheres"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextFb..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:822
-msgid "Fb"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextFn..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:832
-msgid "Fraction of planets with noospheres"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextFn..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:837
-msgid "Fn"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextLc..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:847
-msgid "Mean lifetime of noospheres"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextLc..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:852
-msgid "Lc"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextLs..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:862
-msgid "Mean lifetime of stars"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGalaxy..grbDrakeFormula..StaticTextLs..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:867
-msgid "Ls"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsStars..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:879
-msgid "Stars"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsStars..chlbStarClasses..Font.Name
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:910
-msgid "Tahoma"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsStars..GroupBox2..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:935
-msgid "Constellations"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsStars..GroupBox2..chbConstFigures..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:946
-msgid "Figures"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsStars..GroupBox2..chbConstLines..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:958
-msgid "Lines"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsStars..GroupBox2..chbConstBounds..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:972
-msgid "Borders"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:982
-msgid "General"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..LabelPrecision..Caption
-#. FormSettings..PanelMain..PageControl..tsGeneral..SpinEditPrecision..Hint
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:994
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1074
-msgid "Precision"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..gbxCoordinateSys..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1005
-msgid "Coordinate system"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..gbxCoordinateSys..chbEquatorial..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1018
-msgid "Heliocentric"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..gbxCoordinateSys..CheckBox2..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1032
-msgid "Galactic"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..gbxCoordinateSys..CheckBox1..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1044
-msgid "Supergalactic"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..rgUnits..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1057
-msgid "Units"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..rgUnits....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1060
-msgid "Astronomical unit"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..rgUnits....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1061
-msgid "Light year"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..rgUnits....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1062
-msgid "Kilolight year"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..rgUnits....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1063
-msgid "Parsec"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsGeneral..rgUnits....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1064
-msgid "Kiloparsec"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1090
-msgid "Flights"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..LabelVelocity..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1146
-msgid "Velocity"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..LabelFlightTime..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1157
-msgid "Flight time"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..SearchBoxA..Text
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1171
-msgid "Sol"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..SearchBoxB..Text
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1217
-msgid "TOI-700"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..EditDistance..Text
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1231
-msgid "101.4"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..stTrackBar..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1242
-msgid "TrackBar"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..gbFindPath..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1254
-msgid "Shortest path"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..gbFindPath..chbOnTetramesh..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1265
-msgid "Tetranet"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..gbFindPath..chbAvoidHazards..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1277
-msgid "Polinet"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsFlights..PanelTitle..gbFindPath..CheckBox4..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1289
-msgid "Galagrid"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..Caption
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1302
-msgid "Planets"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..chlbPlanetsize....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1316
-msgid "Jupiterlike"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..chlbPlanetsize....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1317
-msgid "Neptunelike"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..chlbPlanetsize....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1318
-msgid "Superearth"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..chlbPlanetsize....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1319
-msgid "Earthlike"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..chlbPlanetsize....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1320
-msgid "Plutolike"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..CheckListBox1....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1334
-msgid "Gaseous"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..CheckListBox1....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1335
-msgid "Watery"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..CheckListBox1....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1336
-msgid "Rocky"
-msgstr ""
-
-#. FormSettings..PanelMain..PageControl..tsPlanets..CheckListBox1....Items.Strings
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.dfm:1337
-msgid "Icy"
-msgstr ""
-
-#. --------------------------------------------------------
-#: D:/ASTRONOMY/AstrobloQ/src/fGalaktika.pas:526
-msgid "File exists. Can not overwrite"
-msgstr ""
-
-#: D:/ASTRONOMY/AstrobloQ/src/fSettings.pas:304
-msgid "Reload to change language"
-msgstr ""

+ 0 - 66
Examples/AdvDemos/GLSViewer/Locale/en/LC_MESSAGES/languages.po

@@ -1,66 +0,0 @@
-# GLScene Languages.
-#
-# This file is distributed under the same license as GLScene
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-# Translators:
-# Pavel Vassiliev <[email protected]>, 2023
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: GLScene Languages\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: en\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Poedit 3.4.4\n"
-
-msgid "Arabic"
-msgstr "Árabe"
-
-msgid "Chinese"
-msgstr ""
-
-msgid "English"
-msgstr "Inglés"
-
-#. Language of France
-msgid "French"
-msgstr "Francés"
-
-#. Language of Germany
-msgid "German"
-msgstr "Alemán"
-
-#. Language of Greece
-msgid "Greek"
-msgstr "Griego"
-
-#. Language of Italy
-msgid "Italian"
-msgstr "Italiano"
-
-#. Language of Iran
-msgid "Persian"
-msgstr "Persa"
-
-#. Language of Japan
-msgid "Japanese"
-msgstr "Japonés"
-
-#. Language of Portugal
-msgid "Portuguese"
-msgstr "Portugués"
-
-#. Language of Russia
-msgid "Russian"
-msgstr "Ruso"
-
-#. Language of Spain
-msgid "Spanish"
-msgstr "Español"

+ 0 - 30
Examples/AdvDemos/GLSViewer/Locale/readme.txt

@@ -1,30 +0,0 @@
-The directory for po files with translations 
-of captions, text strings and hints from English to other languages 
-using GNU Gettext tools for Delphi, C++ and Lazarus.
-
-----------------------------------------------------------------------------------------
-
-The po files could be created, edited and used in the next way: 
-- Download dxgettext-1.2.2.exe from http://sourceforge.net/projects/dxgettext/ 
-  and install it on your computer. For Windows users there will be corresponding items 
-  inserted to Explorer's menu. 
-- Extract captions, text strings and hints from pas/cpp/dfm files in your project's directory  
-  to insert it to a template default.po file. Right click by mouse button on appropriate folder opened in PoEditor.
-- Merge your project's templete default.po file with main translated samples.po file 
-  if it was earlier extracted from GLScene\Samples directory. Right click on default.po file to execute the command 
-  (the same could be done to merge a template with glscene.po updated by GLScene's developers).
-- Download poEdit editor from https://poedit.net/ and make necessary translations in your additional text strings. 
-- Save your po file from poEdit and then gain compiled mo file. Usually you will have one po/mo files for each language.
-- Include gnugettext.pas into your project's uses clause, set paths to mo files in your program 
-  and make language code selections (note: the last version of gnugettext.pas unit included in GLScene also)
-- Choose the necessary language to build your application and execute your software with localized interface,
-  that includes all source's text strings, hints and translated messages.
-
----------------------------------------------------------------------------
-
-GLSTeam
-
-
-
-
-

TEMPAT SAMPAH
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/default.mo


+ 0 - 1631
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/default.po

@@ -1,1631 +0,0 @@
-#
-#, fuzzy
-msgid ""
-msgstr "Project-Id-Version: \n"
-"POT-Creation-Date: 2023-01-02 19:19+0300\n"
-"PO-Revision-Date: 2024-06-20 22:36+0300\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 "
-"&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 3.4.4\n"
-"X-Poedit-Basepath: ../../../Source\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#. FormViewer..Caption
-#: fcGLSViewer.dfm:8
-#. FormGLSViewer..Caption
-#: fGLSViewer.dfm:8
-msgid "GLSViewer"
-msgstr ""
-
-#. FormViewer..Font.Name
-#: fcGLSViewer.dfm:15
-msgid "Segoe UI"
-msgstr ""
-
-#. FormViewer..ControlBar..atbTools..Caption
-#: fcGLSViewer.dfm:93
-#. FormViewer..ActionManager..acToolsOptions..Category
-#: fcGLSViewer.dfm:1212
-#. FormViewer..ActionManager..acToolsFaceCulling..Category
-#: fcGLSViewer.dfm:1217
-#. FormViewer..ActionManager..acToolsTexturing..Category
-#: fcGLSViewer.dfm:1221
-#. FormViewer..ActionManager..acToolsLighting..Category
-#: fcGLSViewer.dfm:1228
-#. FormViewer..ActionManager..acToolsNaviCube..Category
-#: fcGLSViewer.dfm:1235
-#. FormViewer..ActionManager..acToolsCustomize..Category
-#: fcGLSViewer.dfm:1241
-#. FormViewer..ActionManager..acToolsShowFPS..Category
-#: fcGLSViewer.dfm:1246
-#. FormViewer..ActionManager..acToolsInfo..Category
-#: fcGLSViewer.dfm:1468
-#. FormGLSViewer..ControlBar..atbTools..Caption
-#: fGLSViewer.dfm:210
-#. FormGLSViewer..ActionManager..acToolsOptions..Category
-#: fGLSViewer.dfm:1483
-#. FormGLSViewer..ActionManager..acToolsFaceCulling..Category
-#: fGLSViewer.dfm:1489
-#. FormGLSViewer..ActionManager..acToolsTexturing..Category
-#: fGLSViewer.dfm:1494
-#. FormGLSViewer..ActionManager..acToolsLighting..Category
-#: fGLSViewer.dfm:1502
-#. FormGLSViewer..ActionManager..acToolsNaviCube..Category
-#: fGLSViewer.dfm:1510
-#. FormGLSViewer..ActionManager..acToolsCustomize..Category
-#: fGLSViewer.dfm:1517
-#. FormGLSViewer..ActionManager..acToolsShowFPS..Category
-#: fGLSViewer.dfm:1522
-#. FormGLSViewer..ActionManager..acToolsInfo..Category
-#: fGLSViewer.dfm:1768
-msgid "Tools"
-msgstr "Инструменты"
-
-#. FormViewer..ControlBar..atbTools..Font.Name
-#: fcGLSViewer.dfm:102
-#. FormViewer..ControlBar..atbView..Font.Name
-#: fcGLSViewer.dfm:126
-#. FormViewer..ControlBar..atbFile..Font.Name
-#: fcGLSViewer.dfm:150
-#. FormGLSViewer..ControlBar..atbTools..Font.Name
-#: fGLSViewer.dfm:219
-#. FormGLSViewer..ControlBar..atbView..Font.Name
-#: fGLSViewer.dfm:243
-#. FormGLSViewer..ControlBar..atbFile..Font.Name
-#: fGLSViewer.dfm:267
-msgid "Tahoma"
-msgstr ""
-
-#. FormViewer..ControlBar..atbView..Caption
-#: fcGLSViewer.dfm:117
-#. FormViewer..ActionManager..acViewSmoothShading..Category
-#: fcGLSViewer.dfm:1250
-#. FormViewer..ActionManager..acViewFlatShading..Category
-#: fcGLSViewer.dfm:1259
-#. FormViewer..ActionManager..acViewFlatLines..Category
-#: fcGLSViewer.dfm:1268
-#. FormViewer..ActionManager..acViewHiddenLines..Category
-#: fcGLSViewer.dfm:1277
-#. FormViewer..ActionManager..acViewWireFrame..Category
-#: fcGLSViewer.dfm:1286
-#. FormViewer..ActionManager..acViewZoomIn..Category
-#: fcGLSViewer.dfm:1295
-#. FormViewer..ActionManager..acViewZoomOut..Category
-#: fcGLSViewer.dfm:1301
-#. FormViewer..ActionManager..acViewReset..Category
-#: fcGLSViewer.dfm:1307
-#. FormViewer..ActionManager..acPoints..Category
-#: fcGLSViewer.dfm:1462
-#. FormViewer..ActionManager..acSpheres..Category
-#: fcGLSViewer.dfm:1474
-#. FormGLSViewer..ControlBar..atbView..Caption
-#: fGLSViewer.dfm:234
-#. FormGLSViewer..ActionManager..acViewSmoothShading..Category
-#: fGLSViewer.dfm:1527
-#. FormGLSViewer..ActionManager..acViewFlatShading..Category
-#: fGLSViewer.dfm:1537
-#. FormGLSViewer..ActionManager..acViewFlatLines..Category
-#: fGLSViewer.dfm:1547
-#. FormGLSViewer..ActionManager..acViewHiddenLines..Category
-#: fGLSViewer.dfm:1557
-#. FormGLSViewer..ActionManager..acViewWireFrame..Category
-#: fGLSViewer.dfm:1567
-#. FormGLSViewer..ActionManager..acViewZoomIn..Category
-#: fGLSViewer.dfm:1577
-#. FormGLSViewer..ActionManager..acViewZoomOut..Category
-#: fGLSViewer.dfm:1584
-#. FormGLSViewer..ActionManager..acViewReset..Category
-#: fGLSViewer.dfm:1591
-#. FormGLSViewer..ActionManager..acPoints..Category
-#: fGLSViewer.dfm:1761
-#. FormGLSViewer..ActionManager..acSpheres..Category
-#: fGLSViewer.dfm:1775
-#. FormGLSViewer..ActionManager..acLandscape..Category
-#: fGLSViewer.dfm:1784
-#. FormGLSViewer..ActionManager..acRoom..Category
-#: fGLSViewer.dfm:1789
-msgid "View"
-msgstr "Вид"
-
-#. FormViewer..ControlBar..atbFile..Caption
-#: fcGLSViewer.dfm:141
-#. FormViewer..ActionManager..acFileOpen..Category
-#: fcGLSViewer.dfm:1313
-#. FormViewer..ActionManager..acFilePick..Category
-#: fcGLSViewer.dfm:1320
-#. FormViewer..ActionManager..acFileOpenTexLib..Category
-#: fcGLSViewer.dfm:1326
-#. FormViewer..ActionManager..acFileSaveAs..Category
-#: fcGLSViewer.dfm:1331
-#. FormViewer..ActionManager..acFileSaveTextures..Category
-#: fcGLSViewer.dfm:1337
-#. FormViewer..ActionManager..acSaveTreeView..Category
-#: fcGLSViewer.dfm:1343
-#. FormViewer..ActionManager..acLoadTreeView..Category
-#: fcGLSViewer.dfm:1347
-#. FormViewer..ActionManager..acFileExit..Category
-#: fcGLSViewer.dfm:1351
-#. FormGLSViewer..ControlBar..atbFile..Caption
-#: fGLSViewer.dfm:258
-#. FormGLSViewer..ActionManager..acFileOpen..Category
-#: fGLSViewer.dfm:1598
-#. FormGLSViewer..ActionManager..acFilePick..Category
-#: fGLSViewer.dfm:1606
-#. FormGLSViewer..ActionManager..acFileOpenTexLib..Category
-#: fGLSViewer.dfm:1613
-#. FormGLSViewer..ActionManager..acFileSaveAs..Category
-#: fGLSViewer.dfm:1619
-#. FormGLSViewer..ActionManager..acFileSaveTextures..Category
-#: fGLSViewer.dfm:1627
-#. FormGLSViewer..ActionManager..acSaveTreeView..Category
-#: fGLSViewer.dfm:1634
-#. FormGLSViewer..ActionManager..acLoadTreeView..Category
-#: fGLSViewer.dfm:1639
-#. FormGLSViewer..ActionManager..acFileExit..Category
-#: fGLSViewer.dfm:1644
-msgid "File"
-msgstr "Файл"
-
-#. FormViewer..amMenuBar..Caption
-#: fcGLSViewer.dfm:169
-#. FormGLSViewer..amMenuBar..Caption
-#: fGLSViewer.dfm:286
-msgid "ActionMainMenuBar"
-msgstr ""
-
-#. FormViewer..amMenuBar..Font.Name
-#: fcGLSViewer.dfm:178
-#. GLAbout..PanelTop..LabelVersion..Font.Name
-#: fGLAbout.dfm:144
-#. GLAbout..PanelMiddle..LabelCopyright..Font.Name
-#: fGLAbout.dfm:188
-#. GLAbout..PanelMiddle..FreeAndOpenSource..Font.Name
-#: fGLAbout.dfm:2409
-#. FormGLSViewer..Font.Name
-#: fGLSViewer.dfm:15
-#. FormGLSViewer..amMenuBar..Font.Name
-#: fGLSViewer.dfm:295
-msgid "MS Sans Serif"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:499
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:702
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:803
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1067
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1170
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:754
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:968
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1069
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1333
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1436
-msgid "&Pick texture..."
-msgstr "&Загрузить текстуру..."
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:504
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:811
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1063
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:759
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1077
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1329
-msgid "Op&en Texture Library..."
-msgstr "От&крыть список текстур..."
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:508
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:708
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:815
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1035
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1058
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1176
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:763
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:974
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1081
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1301
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1324
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1442
-msgid "&Save As..."
-msgstr "&Сохранить как..."
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:513
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:820
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1054
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:768
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1086
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1320
-msgid "S&ave Textures..."
-msgstr "&Сохранить текстуру..."
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:516
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:539
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:579
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:606
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:624
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:677
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:747
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:807
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:823
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:839
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:894
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:993
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:1016
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1133
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:771
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:794
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:825
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:845
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:872
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:890
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:943
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1013
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1073
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1089
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1105
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1160
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1259
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1282
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1399
-msgid "-"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:520
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:775
-msgid "Sa&veTreeView..."
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:527
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:827
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1050
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:782
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1093
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1316
-msgid "E&xit"
-msgstr "В&ыход"
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:529
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:829
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:784
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1095
-msgid "&File"
-msgstr "&Файл"
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:565
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:865
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:820
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1131
-msgid "&Edit"
-msgstr "&Правка"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:571
-msgid "&Points"
-msgstr "&Точки"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:576
-msgid "Sph&eres"
-msgstr "&Сферы"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:587
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:724
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:875
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1110
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:853
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:990
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1141
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1376
-msgid "&Flat Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:592
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:730
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:880
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1128
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:858
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:996
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1146
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1394
-msgid "F&lat Shading with Lines"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:597
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:736
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:885
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1116
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:863
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1002
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1151
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1382
-msgid "&Hidden Lines"
-msgstr "&Скрытые линии"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:602
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:742
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:890
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1122
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:868
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1008
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1156
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1388
-msgid "&Wireframe"
-msgstr "&Каркас"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:610
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:751
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:898
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1137
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:876
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1017
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1164
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1403
-msgid "&Zoom In"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:615
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:757
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:903
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1143
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:881
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1023
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1169
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1409
-msgid "Z&oom Out"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:620
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:763
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:908
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1149
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:886
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1029
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1174
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1415
-msgid "&Reset View"
-msgstr ""
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:626
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:911
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:892
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1177
-msgid "&View"
-msgstr "Вид"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:632
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:973
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:898
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1239
-msgid "&Options..."
-msgstr "&Опции..."
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:636
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:977
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:902
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1243
-msgid "&Face Culling"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:640
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:774
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:981
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1081
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:906
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1040
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1247
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1347
-msgid "&Texturing"
-msgstr "&Тесктурирование"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:645
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:780
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:986
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1087
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:911
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1046
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1252
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1353
-msgid "&Lighting"
-msgstr "&Освещение"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:650
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1155
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:916
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1421
-msgid "&Navi Cube"
-msgstr "&Куб навигации"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:658
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:997
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:924
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1263
-msgid "&Show FPS"
-msgstr "&Показать ЧКС"
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:660
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:999
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:926
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1265
-msgid "&Tools"
-msgstr "&Настройки"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:674
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:1013
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:940
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1279
-msgid "&GLScene Home Page"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:681
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:1020
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:947
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1286
-msgid "&About..."
-msgstr "&О программе..."
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:683
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1022
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:949
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1288
-msgid "&Help"
-msgstr "&Справка"
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:919
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1185
-msgid "&Default"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:923
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1189
-msgid "&MSAA 2X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:927
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1193
-msgid "M&SAA 4X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:931
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1197
-msgid "MS&AA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:935
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1201
-msgid "MSAA &16X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:939
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1205
-msgid "&CSAA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:943
-#. FormGLSViewer..ActionManager..................Caption
-#: fGLSViewer.dfm:1209
-msgid "CSAA 1&6X"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:945
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1211
-msgid "&Antialiasing"
-msgstr "&Антиалиасинг"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:949
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1215
-msgid "&Optimize Mesh"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:953
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1219
-msgid "&Invert Normals"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:957
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1223
-msgid "&Reverse Rendering Order"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:961
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1227
-msgid "&Convert to Indexed Triangles"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:965
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:1231
-msgid "&Stripify"
-msgstr ""
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:967
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1233
-msgid "&Processing"
-msgstr ""
-
-#. FormViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1093
-#. FormGLSViewer..ActionManager..........Caption
-#: fGLSViewer.dfm:1359
-msgid "&Info..."
-msgstr ""
-
-#. FormViewer..ActionManager..StyleName
-#: fcGLSViewer.dfm:1185
-#. FormGLSViewer..ActionManager..StyleName
-#: fGLSViewer.dfm:1451
-msgid "Standard"
-msgstr ""
-
-#. FormViewer..ActionManager..acOptimizeMesh..Category
-#: fcGLSViewer.dfm:1187
-#. FormViewer..ActionManager..acProcessInvertNormals..Category
-#: fcGLSViewer.dfm:1192
-#. FormViewer..ActionManager..acReverseRendering..Category
-#: fcGLSViewer.dfm:1197
-#. FormViewer..ActionManager..acConvertToTriangles..Category
-#: fcGLSViewer.dfm:1202
-#. FormViewer..ActionManager..acProcessStripify..Category
-#: fcGLSViewer.dfm:1207
-#. FormGLSViewer..ActionManager..acOptimizeMesh..Category
-#: fGLSViewer.dfm:1453
-#. FormGLSViewer..ActionManager..acProcessInvertNormals..Category
-#: fGLSViewer.dfm:1459
-#. FormGLSViewer..ActionManager..acReverseRendering..Category
-#: fGLSViewer.dfm:1465
-#. FormGLSViewer..ActionManager..acConvertToTriangles..Category
-#: fGLSViewer.dfm:1471
-#. FormGLSViewer..ActionManager..acProcessStripify..Category
-#: fGLSViewer.dfm:1477
-msgid "Processing"
-msgstr ""
-
-#. FormViewer..ActionManager..acOptimizeMesh..Caption
-#: fcGLSViewer.dfm:1188
-#. FormGLSViewer..ActionManager..acOptimizeMesh..Caption
-#: fGLSViewer.dfm:1454
-msgid "Optimize Mesh"
-msgstr "Оптимизировать меш"
-
-#. FormViewer..ActionManager..acOptimizeMesh..Hint
-#: fcGLSViewer.dfm:1189
-#. FormGLSViewer..ActionManager..acOptimizeMesh..Hint
-#: fGLSViewer.dfm:1455
-msgid "Optimize mesh"
-msgstr ""
-
-#. FormViewer..ActionManager..acProcessInvertNormals..Caption
-#: fcGLSViewer.dfm:1193
-#. FormGLSViewer..ActionManager..acProcessInvertNormals..Caption
-#: fGLSViewer.dfm:1460
-msgid "Invert Normals"
-msgstr "Инвертировать нормали"
-
-#. FormViewer..ActionManager..acProcessInvertNormals..Hint
-#: fcGLSViewer.dfm:1194
-#. FormGLSViewer..ActionManager..acProcessInvertNormals..Hint
-#: fGLSViewer.dfm:1461
-msgid "Invert normals"
-msgstr ""
-
-#. FormViewer..ActionManager..acReverseRendering..Caption
-#: fcGLSViewer.dfm:1198
-#. FormGLSViewer..ActionManager..acReverseRendering..Caption
-#: fGLSViewer.dfm:1466
-msgid "Reverse Rendering Order"
-msgstr ""
-
-#. FormViewer..ActionManager..acReverseRendering..Hint
-#: fcGLSViewer.dfm:1199
-#. FormGLSViewer..ActionManager..acReverseRendering..Hint
-#: fGLSViewer.dfm:1467
-msgid "Reverse rendering order"
-msgstr ""
-
-#. FormViewer..ActionManager..acConvertToTriangles..Caption
-#: fcGLSViewer.dfm:1203
-#. FormGLSViewer..ActionManager..acConvertToTriangles..Caption
-#: fGLSViewer.dfm:1472
-msgid "Convert to Indexed Triangles"
-msgstr ""
-
-#. FormViewer..ActionManager..acConvertToTriangles..Hint
-#: fcGLSViewer.dfm:1204
-#. FormGLSViewer..ActionManager..acConvertToTriangles..Hint
-#: fGLSViewer.dfm:1473
-msgid "Convert  to indexed triangles"
-msgstr ""
-
-#. FormViewer..ActionManager..acProcessStripify..Caption
-#: fcGLSViewer.dfm:1208
-#. FormViewer..ActionManager..acProcessStripify..Hint
-#: fcGLSViewer.dfm:1209
-#. FormGLSViewer..ActionManager..acProcessStripify..Caption
-#: fGLSViewer.dfm:1478
-#. FormGLSViewer..ActionManager..acProcessStripify..Hint
-#: fGLSViewer.dfm:1479
-msgid "Stripify"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsOptions..Caption
-#: fcGLSViewer.dfm:1213
-#. FormGLSViewer..ActionManager..acToolsOptions..Caption
-#: fGLSViewer.dfm:1484
-msgid "Options..."
-msgstr "Опции..."
-
-#. FormViewer..ActionManager..acToolsOptions..Hint
-#: fcGLSViewer.dfm:1214
-#. FormGLSViewer..ActionManager..acToolsOptions..Hint
-#: fGLSViewer.dfm:1485
-msgid "Tools|Options..."
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsFaceCulling..Caption
-#: fcGLSViewer.dfm:1218
-#. FormGLSViewer..ActionManager..acToolsFaceCulling..Caption
-#: fGLSViewer.dfm:1490
-msgid "Face Culling"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsTexturing..Caption
-#: fcGLSViewer.dfm:1222
-#. FormViewer..ActionManager..acToolsTexturing..Hint
-#: fcGLSViewer.dfm:1224
-#. FormGLSViewer..ActionManager..acToolsTexturing..Caption
-#: fGLSViewer.dfm:1495
-#. FormGLSViewer..ActionManager..acToolsTexturing..Hint
-#: fGLSViewer.dfm:1497
-msgid "Texturing"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsLighting..Caption
-#: fcGLSViewer.dfm:1229
-#. FormViewer..ActionManager..acToolsLighting..Hint
-#: fcGLSViewer.dfm:1231
-#. FormGLSViewer..ActionManager..acToolsLighting..Caption
-#: fGLSViewer.dfm:1503
-#. FormGLSViewer..ActionManager..acToolsLighting..Hint
-#: fGLSViewer.dfm:1505
-msgid "Lighting"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsNaviCube..Caption
-#: fcGLSViewer.dfm:1236
-#. FormViewer..ActionManager..acToolsNaviCube..Hint
-#: fcGLSViewer.dfm:1237
-#. FormGLSViewer..ActionManager..acToolsNaviCube..Caption
-#: fGLSViewer.dfm:1511
-#. FormGLSViewer..ActionManager..acToolsNaviCube..Hint
-#: fGLSViewer.dfm:1512
-msgid "Navi Cube"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsCustomize..Caption
-#: fcGLSViewer.dfm:1242
-#. FormGLSViewer..ActionManager..acToolsCustomize..Caption
-#: fGLSViewer.dfm:1518
-msgid "&Customize..."
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsShowFPS..Caption
-#: fcGLSViewer.dfm:1247
-#. FormGLSViewer..ActionManager..acToolsShowFPS..Caption
-#: fGLSViewer.dfm:1523
-msgid "Show FPS"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewSmoothShading..Caption
-#: fcGLSViewer.dfm:1252
-#. FormGLSViewer..ActionManager..acViewSmoothShading..Caption
-#: fGLSViewer.dfm:1529
-msgid "&Smooth Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewSmoothShading..Hint
-#: fcGLSViewer.dfm:1255
-#. FormGLSViewer..ActionManager..acViewSmoothShading..Hint
-#: fGLSViewer.dfm:1532
-msgid "Smooth shading|Smooth shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewFlatShading..Caption
-#: fcGLSViewer.dfm:1261
-#. FormGLSViewer..ActionManager..acViewFlatShading..Caption
-#: fGLSViewer.dfm:1539
-msgid "Flat Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewFlatShading..Hint
-#: fcGLSViewer.dfm:1264
-#. FormGLSViewer..ActionManager..acViewFlatShading..Hint
-#: fGLSViewer.dfm:1542
-msgid "Flat Shading|Flat Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewFlatLines..Caption
-#: fcGLSViewer.dfm:1270
-#. FormViewer..ActionManager..acViewFlatLines..Hint
-#: fcGLSViewer.dfm:1273
-#. FormGLSViewer..ActionManager..acViewFlatLines..Caption
-#: fGLSViewer.dfm:1549
-#. FormGLSViewer..ActionManager..acViewFlatLines..Hint
-#: fGLSViewer.dfm:1552
-msgid "Flat Shading with Lines"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewHiddenLines..Caption
-#: fcGLSViewer.dfm:1279
-#. FormViewer..ActionManager..acViewHiddenLines..Hint
-#: fcGLSViewer.dfm:1282
-#. FormGLSViewer..ActionManager..acViewHiddenLines..Caption
-#: fGLSViewer.dfm:1559
-#. FormGLSViewer..ActionManager..acViewHiddenLines..Hint
-#: fGLSViewer.dfm:1562
-msgid "Hidden Lines"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewWireFrame..Caption
-#: fcGLSViewer.dfm:1288
-#. FormViewer..ActionManager..acViewWireFrame..Hint
-#: fcGLSViewer.dfm:1291
-#. FormGLSViewer..ActionManager..acViewWireFrame..Caption
-#: fGLSViewer.dfm:1569
-#. FormGLSViewer..ActionManager..acViewWireFrame..Hint
-#: fGLSViewer.dfm:1572
-msgid "Wireframe"
-msgstr "Каркас"
-
-#. FormViewer..ActionManager..acViewZoomIn..Caption
-#: fcGLSViewer.dfm:1296
-#. FormViewer..ActionManager..acViewZoomIn..Hint
-#: fcGLSViewer.dfm:1297
-#. FormGLSViewer..ActionManager..acViewZoomIn..Caption
-#: fGLSViewer.dfm:1578
-#. FormGLSViewer..ActionManager..acViewZoomIn..Hint
-#: fGLSViewer.dfm:1579
-msgid "Zoom In"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewZoomOut..Caption
-#: fcGLSViewer.dfm:1302
-#. FormViewer..ActionManager..acViewZoomOut..Hint
-#: fcGLSViewer.dfm:1303
-#. FormGLSViewer..ActionManager..acViewZoomOut..Caption
-#: fGLSViewer.dfm:1585
-#. FormGLSViewer..ActionManager..acViewZoomOut..Hint
-#: fGLSViewer.dfm:1586
-msgid "Zoom Out"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewReset..Caption
-#: fcGLSViewer.dfm:1308
-#. FormViewer..ActionManager..acViewReset..Hint
-#: fcGLSViewer.dfm:1309
-#. FormGLSViewer..ActionManager..acViewReset..Caption
-#: fGLSViewer.dfm:1592
-#. FormGLSViewer..ActionManager..acViewReset..Hint
-#: fGLSViewer.dfm:1593
-msgid "Reset View"
-msgstr ""
-
-#. FormViewer..ActionManager..acFileOpen..Caption
-#: fcGLSViewer.dfm:1314
-#. FormGLSViewer..ActionManager..acFileOpen..Caption
-#: fGLSViewer.dfm:1599
-msgid "&Open..."
-msgstr "&Открыть..."
-
-#. FormViewer..ActionManager..acFileOpen..Hint
-#: fcGLSViewer.dfm:1316
-#. FormGLSViewer..ActionManager..acFileOpen..Hint
-#: fGLSViewer.dfm:1601
-msgid "Open"
-msgstr ""
-
-#. FormViewer..ActionManager..acFilePick..Caption
-#: fcGLSViewer.dfm:1321
-#. FormGLSViewer..ActionManager..acFilePick..Caption
-#: fGLSViewer.dfm:1607
-msgid "Pick texture..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFilePick..Hint
-#: fcGLSViewer.dfm:1322
-#. FormGLSViewer..ActionManager..acFilePick..Hint
-#: fGLSViewer.dfm:1608
-msgid "Pick texture"
-msgstr ""
-
-#. FormViewer..ActionManager..acFileOpenTexLib..Caption
-#: fcGLSViewer.dfm:1327
-#. FormGLSViewer..ActionManager..acFileOpenTexLib..Caption
-#: fGLSViewer.dfm:1614
-msgid "Open Texture Library..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFileOpenTexLib..Hint
-#: fcGLSViewer.dfm:1328
-#. FormGLSViewer..ActionManager..acFileOpenTexLib..Hint
-#: fGLSViewer.dfm:1615
-msgid "Open texture library"
-msgstr ""
-
-#. FormViewer..ActionManager..acFileSaveAs..Caption
-#: fcGLSViewer.dfm:1332
-#. FormGLSViewer..ActionManager..acFileSaveAs..Caption
-#: fGLSViewer.dfm:1620
-msgid "Save As..."
-msgstr "Сокранить как..."
-
-#. FormViewer..ActionManager..acFileSaveAs..Hint
-#: fcGLSViewer.dfm:1333
-#. FormGLSViewer..ActionManager..acFileSaveAs..Hint
-#: fGLSViewer.dfm:1621
-msgid "Save as"
-msgstr "Сохранить как"
-
-#. FormViewer..ActionManager..acFileSaveTextures..Caption
-#: fcGLSViewer.dfm:1338
-#. FormGLSViewer..ActionManager..acFileSaveTextures..Caption
-#: fGLSViewer.dfm:1628
-msgid "Save Textures..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFileSaveTextures..Hint
-#: fcGLSViewer.dfm:1340
-#. FormGLSViewer..ActionManager..acFileSaveTextures..Hint
-#: fGLSViewer.dfm:1630
-msgid "Save textures..."
-msgstr "Сохранить текстуры..."
-
-#. FormViewer..ActionManager..acSaveTreeView..Caption
-#: fcGLSViewer.dfm:1344
-#. FormGLSViewer..ActionManager..acSaveTreeView..Caption
-#: fGLSViewer.dfm:1635
-msgid "&SaveTreeView..."
-msgstr ""
-
-#. FormViewer..ActionManager..acLoadTreeView..Caption
-#: fcGLSViewer.dfm:1348
-#. FormGLSViewer..ActionManager..acLoadTreeView..Caption
-#: fGLSViewer.dfm:1640
-msgid "&LoadTreeView..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFileExit..Caption
-#: fcGLSViewer.dfm:1352
-#. FormViewer..ActionManager..acFileExit..Hint
-#: fcGLSViewer.dfm:1353
-#. FormGLSViewer..ActionManager..acFileExit..Caption
-#: fGLSViewer.dfm:1645
-#. FormGLSViewer..ActionManager..acFileExit..Hint
-#: fGLSViewer.dfm:1646
-msgid "Exit"
-msgstr "Выход"
-
-#. FormViewer..ActionManager..acHelpContents..Category
-#: fcGLSViewer.dfm:1356
-#. FormViewer..ActionManager..acHelpTopicSearch..Category
-#: fcGLSViewer.dfm:1363
-#. FormViewer..ActionManager..acHelpGLSHomePage..Category
-#: fcGLSViewer.dfm:1370
-#. FormViewer..ActionManager..acHelpAbout..Category
-#: fcGLSViewer.dfm:1375
-#. GLDialog..PanelBottom..ButtonHelp..Caption
-#: fGLDialog.dfm:75
-#. FormGLSViewer..ActionManager..acHelpContents..Category
-#: fGLSViewer.dfm:1650
-#. FormGLSViewer..ActionManager..acHelpTopicSearch..Category
-#: fGLSViewer.dfm:1658
-#. FormGLSViewer..ActionManager..acHelpGLSHomePage..Category
-#: fGLSViewer.dfm:1666
-#. FormGLSViewer..ActionManager..acHelpAbout..Category
-#: fGLSViewer.dfm:1672
-msgid "Help"
-msgstr "Справка"
-
-#. FormViewer..ActionManager..acHelpContents..Caption
-#: fcGLSViewer.dfm:1357
-#. FormGLSViewer..ActionManager..acHelpContents..Caption
-#: fGLSViewer.dfm:1651
-msgid "&Contents"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpContents..Hint
-#: fcGLSViewer.dfm:1359
-#. FormGLSViewer..ActionManager..acHelpContents..Hint
-#: fGLSViewer.dfm:1653
-msgid "Contents|Help Contents"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpTopicSearch..Caption
-#: fcGLSViewer.dfm:1364
-#. FormGLSViewer..ActionManager..acHelpTopicSearch..Caption
-#: fGLSViewer.dfm:1659
-msgid "&Topic Search"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpTopicSearch..Hint
-#: fcGLSViewer.dfm:1366
-#. FormGLSViewer..ActionManager..acHelpTopicSearch..Hint
-#: fGLSViewer.dfm:1661
-msgid "Help|Topic Search"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpGLSHomePage..Caption
-#: fcGLSViewer.dfm:1371
-#. FormGLSViewer..ActionManager..acHelpGLSHomePage..Caption
-#: fGLSViewer.dfm:1667
-msgid "GLScene Home Page"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpGLSHomePage..Hint
-#: fcGLSViewer.dfm:1372
-#. FormGLSViewer..ActionManager..acHelpGLSHomePage..Hint
-#: fGLSViewer.dfm:1668
-msgid "Help|Home page"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpAbout..Caption
-#: fcGLSViewer.dfm:1376
-#. FormGLSViewer..ActionManager..acHelpAbout..Caption
-#: fGLSViewer.dfm:1673
-msgid "About..."
-msgstr "О программе..."
-
-#. FormViewer..ActionManager..acHelpAbout..Hint
-#: fcGLSViewer.dfm:1377
-#. FormGLSViewer..ActionManager..acHelpAbout..Hint
-#: fGLSViewer.dfm:1674
-msgid "Help|About..."
-msgstr ""
-
-#. FormViewer..ActionManager..acAADefault..Category
-#: fcGLSViewer.dfm:1380
-#. FormViewer..ActionManager..acAA2X..Category
-#: fcGLSViewer.dfm:1388
-#. FormViewer..ActionManager..acAA4X..Category
-#: fcGLSViewer.dfm:1394
-#. FormViewer..ActionManager..acAA8X..Category
-#: fcGLSViewer.dfm:1441
-#. FormViewer..ActionManager..acAA16X..Category
-#: fcGLSViewer.dfm:1446
-#. FormViewer..ActionManager..acCSA8X..Category
-#: fcGLSViewer.dfm:1452
-#. FormViewer..ActionManager..acCSA16X..Category
-#: fcGLSViewer.dfm:1457
-#. FormGLSViewer..ActionManager..acAADefault..Category
-#: fGLSViewer.dfm:1678
-#. FormGLSViewer..ActionManager..acAA2X..Category
-#: fGLSViewer.dfm:1687
-#. FormGLSViewer..ActionManager..acAA4X..Category
-#: fGLSViewer.dfm:1693
-#. FormGLSViewer..ActionManager..acAA8X..Category
-#: fGLSViewer.dfm:1740
-#. FormGLSViewer..ActionManager..acAA16X..Category
-#: fGLSViewer.dfm:1745
-#. FormGLSViewer..ActionManager..acCSA8X..Category
-#: fGLSViewer.dfm:1751
-#. FormGLSViewer..ActionManager..acCSA16X..Category
-#: fGLSViewer.dfm:1756
-msgid "Antialiasing"
-msgstr ""
-
-#. FormViewer..ActionManager..acAADefault..Caption
-#: fcGLSViewer.dfm:1382
-#. FormGLSViewer..ActionManager..acAADefault..Caption
-#: fGLSViewer.dfm:1680
-msgid "Default"
-msgstr ""
-
-#. FormViewer..ActionManager..acAADefault..Hint
-#: fcGLSViewer.dfm:1385
-#. FormGLSViewer..ActionManager..acAADefault..Hint
-#: fGLSViewer.dfm:1683
-msgid "Default|Default antialiacing"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA2X..Caption
-#: fcGLSViewer.dfm:1390
-#. FormGLSViewer..ActionManager..acAA2X..Caption
-#: fGLSViewer.dfm:1689
-msgid "MSAA 2X"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA4X..Caption
-#: fcGLSViewer.dfm:1396
-#. FormGLSViewer..ActionManager..acAA4X..Caption
-#: fGLSViewer.dfm:1695
-msgid "MSAA 4X"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditUndo..Category
-#: fcGLSViewer.dfm:1400
-#. FormViewer..ActionManager..acEditCut..Category
-#: fcGLSViewer.dfm:1407
-#. FormViewer..ActionManager..acEditCopy..Category
-#: fcGLSViewer.dfm:1414
-#. FormViewer..ActionManager..acEditPaste..Category
-#: fcGLSViewer.dfm:1421
-#. FormViewer..ActionManager..acEditSelectAll..Category
-#: fcGLSViewer.dfm:1428
-#. FormViewer..ActionManager..acEditDelete..Category
-#: fcGLSViewer.dfm:1434
-#. FormGLSViewer..ActionManager..acEditUndo..Category
-#: fGLSViewer.dfm:1699
-#. FormGLSViewer..ActionManager..acEditCut..Category
-#: fGLSViewer.dfm:1706
-#. FormGLSViewer..ActionManager..acEditCopy..Category
-#: fGLSViewer.dfm:1713
-#. FormGLSViewer..ActionManager..acEditPaste..Category
-#: fGLSViewer.dfm:1720
-#. FormGLSViewer..ActionManager..acEditSelectAll..Category
-#: fGLSViewer.dfm:1727
-#. FormGLSViewer..ActionManager..acEditDelete..Category
-#: fGLSViewer.dfm:1733
-#. FormGLSViewer..ActionManager..acClear..Category
-#: fGLSViewer.dfm:1780
-msgid "Edit"
-msgstr "Правка"
-
-#. FormViewer..ActionManager..acEditUndo..Caption
-#: fcGLSViewer.dfm:1401
-#. FormGLSViewer..ActionManager..acEditUndo..Caption
-#: fGLSViewer.dfm:1700
-msgid "&Undo"
-msgstr "&Отмена"
-
-#. FormViewer..ActionManager..acEditUndo..Hint
-#: fcGLSViewer.dfm:1402
-#. FormGLSViewer..ActionManager..acEditUndo..Hint
-#: fGLSViewer.dfm:1701
-msgid "Undo|Reverts"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCut..Caption
-#: fcGLSViewer.dfm:1408
-#. FormGLSViewer..ActionManager..acEditCut..Caption
-#: fGLSViewer.dfm:1707
-msgid "Cu&t"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCut..Hint
-#: fcGLSViewer.dfm:1409
-#. FormGLSViewer..ActionManager..acEditCut..Hint
-#: fGLSViewer.dfm:1708
-msgid "Cut|Cut the selection and puts it on the "
-"Clipboard"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCopy..Caption
-#: fcGLSViewer.dfm:1415
-#. FormGLSViewer..ActionManager..acEditCopy..Caption
-#: fGLSViewer.dfm:1714
-msgid "&Copy"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCopy..Hint
-#: fcGLSViewer.dfm:1416
-#. FormGLSViewer..ActionManager..acEditCopy..Hint
-#: fGLSViewer.dfm:1715
-msgid "Copy|Copies the selection and puts it on the "
-"Clipboard"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditPaste..Caption
-#: fcGLSViewer.dfm:1422
-#. FormGLSViewer..ActionManager..acEditPaste..Caption
-#: fGLSViewer.dfm:1721
-msgid "&Paste"
-msgstr "&Вставка"
-
-#. FormViewer..ActionManager..acEditPaste..Hint
-#: fcGLSViewer.dfm:1423
-#. FormGLSViewer..ActionManager..acEditPaste..Hint
-#: fGLSViewer.dfm:1722
-msgid "Paste|Inserts Clipboard contents"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditSelectAll..Caption
-#: fcGLSViewer.dfm:1429
-#. FormGLSViewer..ActionManager..acEditSelectAll..Caption
-#: fGLSViewer.dfm:1728
-msgid "Select &All"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditSelectAll..Hint
-#: fcGLSViewer.dfm:1430
-#. FormGLSViewer..ActionManager..acEditSelectAll..Hint
-#: fGLSViewer.dfm:1729
-msgid "Select All|Selects the entire document"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditDelete..Caption
-#: fcGLSViewer.dfm:1435
-#. FormGLSViewer..ActionManager..acEditDelete..Caption
-#: fGLSViewer.dfm:1734
-msgid "&Delete"
-msgstr "&Удалить"
-
-#. FormViewer..ActionManager..acEditDelete..Hint
-#: fcGLSViewer.dfm:1436
-#. FormGLSViewer..ActionManager..acEditDelete..Hint
-#: fGLSViewer.dfm:1735
-msgid "Delete|Erases the selection"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA8X..Caption
-#: fcGLSViewer.dfm:1442
-#. FormGLSViewer..ActionManager..acAA8X..Caption
-#: fGLSViewer.dfm:1741
-msgid "MSAA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA16X..Caption
-#: fcGLSViewer.dfm:1448
-#. FormGLSViewer..ActionManager..acAA16X..Caption
-#: fGLSViewer.dfm:1747
-msgid "MSAA 16X"
-msgstr ""
-
-#. FormViewer..ActionManager..acCSA8X..Caption
-#: fcGLSViewer.dfm:1453
-#. FormGLSViewer..ActionManager..acCSA8X..Caption
-#: fGLSViewer.dfm:1752
-msgid "CSAA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..acCSA16X..Caption
-#: fcGLSViewer.dfm:1458
-#. FormGLSViewer..ActionManager..acCSA16X..Caption
-#: fGLSViewer.dfm:1757
-msgid "CSAA 16X"
-msgstr ""
-
-#. FormViewer..ActionManager..acPoints..Caption
-#: fcGLSViewer.dfm:1463
-#. FormViewer..ActionManager..acPoints..Hint
-#: fcGLSViewer.dfm:1464
-#. FormGLSViewer..ActionManager..acPoints..Hint
-#: fGLSViewer.dfm:1763
-msgid "Points"
-msgstr "Точки"
-
-#. FormViewer..ActionManager..acToolsInfo..Caption
-#: fcGLSViewer.dfm:1469
-#. FormGLSViewer..ActionManager..acToolsInfo..Caption
-#: fGLSViewer.dfm:1769
-msgid "Info..."
-msgstr "Инфо..."
-
-#. FormViewer..ActionManager..acToolsInfo..Hint
-#: fcGLSViewer.dfm:1470
-#. FormGLSViewer..ActionManager..acToolsInfo..Hint
-#: fGLSViewer.dfm:1770
-msgid "Info of objects"
-msgstr ""
-
-#. FormViewer..ActionManager..acSpheres..Caption
-#: fcGLSViewer.dfm:1475
-msgid "Spheres"
-msgstr "Сферы"
-
-#. FormViewer..GLSimpleNavigation..FormCaption
-#: fcGLSViewer.dfm:2288
-#. FormGLSViewer..GLSimpleNavigation..FormCaption
-#: fGLSViewer.dfm:2605
-msgid "GLSViewer - %FPS"
-msgstr ""
-
-#. GLAbout..Caption
-#: fGLAbout.dfm:2
-msgid "About"
-msgstr "&О программе"
-
-#. GLAbout..PanelTop..LabelVersion..Caption
-#: fGLAbout.dfm:140
-msgid "version"
-msgstr "версия"
-
-#. GLAbout..PanelTop..LabelGeoblock..Caption
-#: fGLAbout.dfm:154
-msgid "GLScene Viewer"
-msgstr ""
-
-#. GLAbout..PanelTop..LabelGeoblock..Font.Name
-#: fGLAbout.dfm:158
-msgid "Times New Roman"
-msgstr ""
-
-#. GLAbout..PanelMiddle..LabelCopyright..Caption
-#: fGLAbout.dfm:184
-msgid "Copyright"
-msgstr ""
-
-#. GLAbout..PanelMiddle..imgOpenGL..Hint
-#: fGLAbout.dfm:198
-msgid "www.opengl.org"
-msgstr ""
-
-#. GLAbout..PanelMiddle..imgSourceForge..Hint
-#: fGLAbout.dfm:383
-msgid "www.sourceforge.net/projects/glscene"
-msgstr ""
-
-#. GLAbout..PanelMiddle..imgGLScene..Hint
-#: fGLAbout.dfm:548
-msgid "www.glscene.org"
-msgstr ""
-
-#. GLAbout..PanelMiddle..Label1..Caption
-#: fGLAbout.dfm:2391
-msgid "GLScene Team"
-msgstr ""
-
-#. GLAbout..PanelMiddle..Label3..Caption
-#: fGLAbout.dfm:2398
-msgid "3D view, 3D file formats support:"
-msgstr ""
-
-#. GLAbout..PanelMiddle..FreeAndOpenSource..Caption
-#: fGLAbout.dfm:2405
-msgid "Open source software"
-msgstr ""
-
-#. GLDialog..Caption
-#: fGLDialog.dfm:3
-msgid "GLScene Dialog"
-msgstr ""
-
-#. GLDialog..PanelBottom..ButtonOK..Caption
-#: fGLDialog.dfm:57
-msgid "OK"
-msgstr ""
-
-#. GLDialog..PanelBottom..ButtonCancel..Caption
-#: fGLDialog.dfm:66
-msgid "Cancel"
-msgstr "Отмена"
-
-#. FormOptions..Caption
-#: fGLOptions.dfm:3
-msgid "Options"
-msgstr "Опции"
-
-#. FormOptions..rgLanguage..Caption
-#: fGLOptions.dfm:24
-msgid "Language"
-msgstr "Язык"
-
-#. FormOptions..rgLanguage....Items.Strings
-#: fGLOptions.dfm:28
-msgid "English"
-msgstr "Английский"
-
-#. FormOptions..rgLanguage....Items.Strings
-#: fGLOptions.dfm:29
-msgid "Russian"
-msgstr "Русский"
-
-#. FormOptions..rgLanguage....Items.Strings
-#: fGLOptions.dfm:30
-msgid "Spanish"
-msgstr "Испанский"
-
-#. FormOptions..CheckBoxAxis..Caption
-#: fGLOptions.dfm:43
-msgid "Axis"
-msgstr ""
-
-#. FormOptions..ButtonOk..Caption
-#: fGLOptions.dfm:69
-msgid "Ok"
-msgstr ""
-
-#. FormGLSViewer..Scene..dcWorld..Tree..LeafMaterialName
-#: fGLSViewer.dfm:717
-msgid "LeafFront"
-msgstr ""
-
-#. FormGLSViewer..Scene..dcWorld..Tree..LeafBackMaterialName
-#: fGLSViewer.dfm:718
-msgid "LeafBack"
-msgstr ""
-
-#. FormGLSViewer..Scene..dcWorld..Tree..BranchMaterialName
-#: fGLSViewer.dfm:719
-#. FormGLSViewer..MLTree......Name
-#: fGLSViewer.dfm:2625
-msgid "TreeBark"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:829
-msgid "R&andom Points"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:834
-msgid "Ra&ndom Spheres"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:838
-msgid "Lan&dscape Hills"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:842
-msgid "Roo&m with Objects"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..acPoints..Caption
-#: fGLSViewer.dfm:1762
-msgid "Random Points"
-msgstr "Случайные точки"
-
-#. FormGLSViewer..ActionManager..acSpheres..Caption
-#: fGLSViewer.dfm:1776
-msgid "Random Spheres"
-msgstr "Случайные сферы"
-
-#. FormGLSViewer..ActionManager..acClear..Caption
-#: fGLSViewer.dfm:1781
-msgid "Clear"
-msgstr "Очситить"
-
-#. FormGLSViewer..ActionManager..acLandscape..Caption
-#: fGLSViewer.dfm:1785
-msgid "Landscape Hills"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..acRoom..Caption
-#: fGLSViewer.dfm:1790
-msgid "Room with Objects"
-msgstr "Комната с объектами"
-
-#. FormGLSViewer..MLTree......Material.Texture.ImageClassName
-#: fGLSViewer.dfm:2627
-#. FormGLSViewer..MLTree......Material.Texture.ImageClassName
-#: fGLSViewer.dfm:2633
-msgid "TGLPicFileImage"
-msgstr ""
-
-#. FormGLSViewer..MLTree......Name
-#: fGLSViewer.dfm:2631
-msgid "LeafTexture"
-msgstr ""
-
-#. FormGLSViewer..MLTree......Material.Texture.Image.PictureFileName
-#: fGLSViewer.dfm:2634
-msgid "..\\..\\..\\Texture\\leaf.tga"
-msgstr ""
-
-#. FormGLSViewer..MLTree......Name
-#: fGLSViewer.dfm:2637
-msgid "FruitTexture"
-msgstr ""
-
-#: fGLOptions.pas:141
-msgid "Reload to change language"
-msgstr "Перезагрузите для изменения языка"
-
-#: fGLSViewer.pas:453
-msgid "Unsupported or unspecified file extension."
-msgstr ""
-

TEMPAT SAMPAH
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/examples.mo


+ 0 - 89
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/examples.po

@@ -1,89 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2013-01-05 15:45\n"
-"PO-Revision-Date: 2013-01-05 16:25+0300\n"
-"Last-Translator: Pavel Vassiliev <[email protected]>\n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: dxgettext 1.2.2\n"
-
-msgid "About..."
-msgstr "О программе..."
-
-msgid "Collisions"
-msgstr "Столкновения"
-
-msgid "Depth"
-msgstr "Глубина"
-
-msgid "Double Mass"
-msgstr "Двойная масса"
-
-msgid "Fire"
-msgstr "Огонь"
-
-msgid "Forces"
-msgstr "Сила"
-
-msgid "Caterpillar"
-msgstr "Гусеница"
-
-msgid "Cel Shading"
-msgstr "Клеточное затенение"
-
-msgid "Culling"
-msgstr "Выбраковка"
-
-msgid "Import..."
-msgstr "Импорт..."
-
-msgid "Megacube"
-msgstr "Мегакуб"
-
-msgid "Objects"
-msgstr "Объекты"
-
-msgid "Objects:"
-msgstr "Объекты:"
-
-msgid "Ok"
-msgstr "ОК"
-
-msgid "Path Control"
-msgstr "Контроль маршрута"
-
-msgid "Quadtree"
-msgstr "Квадродерево"
-
-msgid "Russian"
-msgstr "Русский"
-
-msgid "Shaded Terrain"
-msgstr "Шейдер террейн"
-
-msgid "Shader"
-msgstr "Шейдер"
-
-msgid "Sphere"
-msgstr "Сфера"
-
-msgid "Start Movement"
-msgstr "Начало движения"
-
-msgid "TeePot"
-msgstr "Чайник"
-
-msgid "Texture size"
-msgstr "Размер текстуры"
-
-msgid "Sphere:"
-msgstr "Сфера:"
-
-msgid "Volcano"
-msgstr "Вулкан"
-
-msgid "Whirlwind"
-msgstr "Вихрь"

TEMPAT SAMPAH
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/glsviewer.mo


+ 0 - 1335
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/glsviewer.po

@@ -1,1335 +0,0 @@
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: 2023-01-02 19:19+0300\n"
-"PO-Revision-Date: 2024-06-20 22:36+0300\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 "
-"&& n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Poedit 3.4.4\n"
-"X-Poedit-Basepath: ../../../Source\n"
-"X-Poedit-SearchPath-0: .\n"
-
-#. FormViewer..Caption
-#. FormGLSViewer..Caption
-#: fcGLSViewer.dfm:8 fGLSViewer.dfm:8
-msgid "GLSViewer"
-msgstr ""
-
-#. FormViewer..Font.Name
-#: fcGLSViewer.dfm:15
-msgid "Segoe UI"
-msgstr ""
-
-#. FormViewer..ControlBar..atbTools..Caption
-#. FormViewer..ActionManager..acToolsOptions..Category
-#. FormViewer..ActionManager..acToolsFaceCulling..Category
-#. FormViewer..ActionManager..acToolsTexturing..Category
-#. FormViewer..ActionManager..acToolsLighting..Category
-#. FormViewer..ActionManager..acToolsNaviCube..Category
-#. FormViewer..ActionManager..acToolsCustomize..Category
-#. FormViewer..ActionManager..acToolsShowFPS..Category
-#. FormViewer..ActionManager..acToolsInfo..Category
-#. FormGLSViewer..ControlBar..atbTools..Caption
-#. FormGLSViewer..ActionManager..acToolsOptions..Category
-#. FormGLSViewer..ActionManager..acToolsFaceCulling..Category
-#. FormGLSViewer..ActionManager..acToolsTexturing..Category
-#. FormGLSViewer..ActionManager..acToolsLighting..Category
-#. FormGLSViewer..ActionManager..acToolsNaviCube..Category
-#. FormGLSViewer..ActionManager..acToolsCustomize..Category
-#. FormGLSViewer..ActionManager..acToolsShowFPS..Category
-#. FormGLSViewer..ActionManager..acToolsInfo..Category
-#: fcGLSViewer.dfm:93 fcGLSViewer.dfm:1212 fcGLSViewer.dfm:1217
-#: fcGLSViewer.dfm:1221 fcGLSViewer.dfm:1228 fcGLSViewer.dfm:1235
-#: fcGLSViewer.dfm:1241 fcGLSViewer.dfm:1246 fcGLSViewer.dfm:1468
-#: fGLSViewer.dfm:210 fGLSViewer.dfm:1483 fGLSViewer.dfm:1489
-#: fGLSViewer.dfm:1494 fGLSViewer.dfm:1502 fGLSViewer.dfm:1510
-#: fGLSViewer.dfm:1517 fGLSViewer.dfm:1522 fGLSViewer.dfm:1768
-msgid "Tools"
-msgstr "Инструменты"
-
-#. FormViewer..ControlBar..atbTools..Font.Name
-#. FormViewer..ControlBar..atbView..Font.Name
-#. FormViewer..ControlBar..atbFile..Font.Name
-#. FormGLSViewer..ControlBar..atbTools..Font.Name
-#. FormGLSViewer..ControlBar..atbView..Font.Name
-#. FormGLSViewer..ControlBar..atbFile..Font.Name
-#: fcGLSViewer.dfm:102 fcGLSViewer.dfm:126 fcGLSViewer.dfm:150
-#: fGLSViewer.dfm:219 fGLSViewer.dfm:243 fGLSViewer.dfm:267
-msgid "Tahoma"
-msgstr ""
-
-#. FormViewer..ControlBar..atbView..Caption
-#. FormViewer..ActionManager..acViewSmoothShading..Category
-#. FormViewer..ActionManager..acViewFlatShading..Category
-#. FormViewer..ActionManager..acViewFlatLines..Category
-#. FormViewer..ActionManager..acViewHiddenLines..Category
-#. FormViewer..ActionManager..acViewWireFrame..Category
-#. FormViewer..ActionManager..acViewZoomIn..Category
-#. FormViewer..ActionManager..acViewZoomOut..Category
-#. FormViewer..ActionManager..acViewReset..Category
-#. FormViewer..ActionManager..acPoints..Category
-#. FormViewer..ActionManager..acSpheres..Category
-#. FormGLSViewer..ControlBar..atbView..Caption
-#. FormGLSViewer..ActionManager..acViewSmoothShading..Category
-#. FormGLSViewer..ActionManager..acViewFlatShading..Category
-#. FormGLSViewer..ActionManager..acViewFlatLines..Category
-#. FormGLSViewer..ActionManager..acViewHiddenLines..Category
-#. FormGLSViewer..ActionManager..acViewWireFrame..Category
-#. FormGLSViewer..ActionManager..acViewZoomIn..Category
-#. FormGLSViewer..ActionManager..acViewZoomOut..Category
-#. FormGLSViewer..ActionManager..acViewReset..Category
-#. FormGLSViewer..ActionManager..acPoints..Category
-#. FormGLSViewer..ActionManager..acSpheres..Category
-#. FormGLSViewer..ActionManager..acLandscape..Category
-#. FormGLSViewer..ActionManager..acRoom..Category
-#: fcGLSViewer.dfm:117 fcGLSViewer.dfm:1250 fcGLSViewer.dfm:1259
-#: fcGLSViewer.dfm:1268 fcGLSViewer.dfm:1277 fcGLSViewer.dfm:1286
-#: fcGLSViewer.dfm:1295 fcGLSViewer.dfm:1301 fcGLSViewer.dfm:1307
-#: fcGLSViewer.dfm:1462 fcGLSViewer.dfm:1474 fGLSViewer.dfm:234
-#: fGLSViewer.dfm:1527 fGLSViewer.dfm:1537 fGLSViewer.dfm:1547
-#: fGLSViewer.dfm:1557 fGLSViewer.dfm:1567 fGLSViewer.dfm:1577
-#: fGLSViewer.dfm:1584 fGLSViewer.dfm:1591 fGLSViewer.dfm:1761
-#: fGLSViewer.dfm:1775 fGLSViewer.dfm:1784 fGLSViewer.dfm:1789
-msgid "View"
-msgstr "Вид"
-
-#. FormViewer..ControlBar..atbFile..Caption
-#. FormViewer..ActionManager..acFileOpen..Category
-#. FormViewer..ActionManager..acFilePick..Category
-#. FormViewer..ActionManager..acFileOpenTexLib..Category
-#. FormViewer..ActionManager..acFileSaveAs..Category
-#. FormViewer..ActionManager..acFileSaveTextures..Category
-#. FormViewer..ActionManager..acSaveTreeView..Category
-#. FormViewer..ActionManager..acLoadTreeView..Category
-#. FormViewer..ActionManager..acFileExit..Category
-#. FormGLSViewer..ControlBar..atbFile..Caption
-#. FormGLSViewer..ActionManager..acFileOpen..Category
-#. FormGLSViewer..ActionManager..acFilePick..Category
-#. FormGLSViewer..ActionManager..acFileOpenTexLib..Category
-#. FormGLSViewer..ActionManager..acFileSaveAs..Category
-#. FormGLSViewer..ActionManager..acFileSaveTextures..Category
-#. FormGLSViewer..ActionManager..acSaveTreeView..Category
-#. FormGLSViewer..ActionManager..acLoadTreeView..Category
-#. FormGLSViewer..ActionManager..acFileExit..Category
-#: fcGLSViewer.dfm:141 fcGLSViewer.dfm:1313 fcGLSViewer.dfm:1320
-#: fcGLSViewer.dfm:1326 fcGLSViewer.dfm:1331 fcGLSViewer.dfm:1337
-#: fcGLSViewer.dfm:1343 fcGLSViewer.dfm:1347 fcGLSViewer.dfm:1351
-#: fGLSViewer.dfm:258 fGLSViewer.dfm:1598 fGLSViewer.dfm:1606
-#: fGLSViewer.dfm:1613 fGLSViewer.dfm:1619 fGLSViewer.dfm:1627
-#: fGLSViewer.dfm:1634 fGLSViewer.dfm:1639 fGLSViewer.dfm:1644
-msgid "File"
-msgstr "Файл"
-
-#. FormViewer..amMenuBar..Caption
-#. FormGLSViewer..amMenuBar..Caption
-#: fcGLSViewer.dfm:169 fGLSViewer.dfm:286
-msgid "ActionMainMenuBar"
-msgstr ""
-
-#. FormViewer..amMenuBar..Font.Name
-#. GLAbout..PanelTop..LabelVersion..Font.Name
-#. GLAbout..PanelMiddle..LabelCopyright..Font.Name
-#. GLAbout..PanelMiddle..FreeAndOpenSource..Font.Name
-#. FormGLSViewer..Font.Name
-#. FormGLSViewer..amMenuBar..Font.Name
-#: fcGLSViewer.dfm:178 fGLAbout.dfm:144 fGLAbout.dfm:188
-#: fGLAbout.dfm:2409 fGLSViewer.dfm:15 fGLSViewer.dfm:295
-msgid "MS Sans Serif"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:499 fcGLSViewer.dfm:702 fcGLSViewer.dfm:803
-#: fcGLSViewer.dfm:1067 fcGLSViewer.dfm:1170 fGLSViewer.dfm:754
-#: fGLSViewer.dfm:968 fGLSViewer.dfm:1069 fGLSViewer.dfm:1333
-#: fGLSViewer.dfm:1436
-msgid "&Pick texture..."
-msgstr "&Загрузить текстуру..."
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:504 fcGLSViewer.dfm:811 fcGLSViewer.dfm:1063
-#: fGLSViewer.dfm:759 fGLSViewer.dfm:1077 fGLSViewer.dfm:1329
-msgid "Op&en Texture Library..."
-msgstr "От&крыть список текстур..."
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:508 fcGLSViewer.dfm:708 fcGLSViewer.dfm:815
-#: fcGLSViewer.dfm:1035 fcGLSViewer.dfm:1058 fcGLSViewer.dfm:1176
-#: fGLSViewer.dfm:763 fGLSViewer.dfm:974 fGLSViewer.dfm:1081
-#: fGLSViewer.dfm:1301 fGLSViewer.dfm:1324 fGLSViewer.dfm:1442
-msgid "&Save As..."
-msgstr "&Сохранить как..."
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:513 fcGLSViewer.dfm:820 fcGLSViewer.dfm:1054
-#: fGLSViewer.dfm:768 fGLSViewer.dfm:1086 fGLSViewer.dfm:1320
-msgid "S&ave Textures..."
-msgstr "&Сохранить текстуру..."
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:516 fcGLSViewer.dfm:539 fcGLSViewer.dfm:579
-#: fcGLSViewer.dfm:606 fcGLSViewer.dfm:624 fcGLSViewer.dfm:677
-#: fcGLSViewer.dfm:747 fcGLSViewer.dfm:807 fcGLSViewer.dfm:823
-#: fcGLSViewer.dfm:839 fcGLSViewer.dfm:894 fcGLSViewer.dfm:993
-#: fcGLSViewer.dfm:1016 fcGLSViewer.dfm:1133 fGLSViewer.dfm:771
-#: fGLSViewer.dfm:794 fGLSViewer.dfm:825 fGLSViewer.dfm:845
-#: fGLSViewer.dfm:872 fGLSViewer.dfm:890 fGLSViewer.dfm:943
-#: fGLSViewer.dfm:1013 fGLSViewer.dfm:1073 fGLSViewer.dfm:1089
-#: fGLSViewer.dfm:1105 fGLSViewer.dfm:1160 fGLSViewer.dfm:1259
-#: fGLSViewer.dfm:1282 fGLSViewer.dfm:1399
-msgid "-"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:520 fGLSViewer.dfm:775
-msgid "Sa&veTreeView..."
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:527 fcGLSViewer.dfm:827 fcGLSViewer.dfm:1050
-#: fGLSViewer.dfm:782 fGLSViewer.dfm:1093 fGLSViewer.dfm:1316
-msgid "E&xit"
-msgstr "В&ыход"
-
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:529 fcGLSViewer.dfm:829 fGLSViewer.dfm:784
-#: fGLSViewer.dfm:1095
-msgid "&File"
-msgstr "&Файл"
-
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:565 fcGLSViewer.dfm:865 fGLSViewer.dfm:820
-#: fGLSViewer.dfm:1131
-msgid "&Edit"
-msgstr "&Правка"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:571
-msgid "&Points"
-msgstr "&Точки"
-
-#. FormViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:576
-msgid "Sph&eres"
-msgstr "&Сферы"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:587 fcGLSViewer.dfm:724 fcGLSViewer.dfm:875
-#: fcGLSViewer.dfm:1110 fGLSViewer.dfm:853 fGLSViewer.dfm:990
-#: fGLSViewer.dfm:1141 fGLSViewer.dfm:1376
-msgid "&Flat Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:592 fcGLSViewer.dfm:730 fcGLSViewer.dfm:880
-#: fcGLSViewer.dfm:1128 fGLSViewer.dfm:858 fGLSViewer.dfm:996
-#: fGLSViewer.dfm:1146 fGLSViewer.dfm:1394
-msgid "F&lat Shading with Lines"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:597 fcGLSViewer.dfm:736 fcGLSViewer.dfm:885
-#: fcGLSViewer.dfm:1116 fGLSViewer.dfm:863 fGLSViewer.dfm:1002
-#: fGLSViewer.dfm:1151 fGLSViewer.dfm:1382
-msgid "&Hidden Lines"
-msgstr "&Скрытые линии"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:602 fcGLSViewer.dfm:742 fcGLSViewer.dfm:890
-#: fcGLSViewer.dfm:1122 fGLSViewer.dfm:868 fGLSViewer.dfm:1008
-#: fGLSViewer.dfm:1156 fGLSViewer.dfm:1388
-msgid "&Wireframe"
-msgstr "&Каркас"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:610 fcGLSViewer.dfm:751 fcGLSViewer.dfm:898
-#: fcGLSViewer.dfm:1137 fGLSViewer.dfm:876 fGLSViewer.dfm:1017
-#: fGLSViewer.dfm:1164 fGLSViewer.dfm:1403
-msgid "&Zoom In"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:615 fcGLSViewer.dfm:757 fcGLSViewer.dfm:903
-#: fcGLSViewer.dfm:1143 fGLSViewer.dfm:881 fGLSViewer.dfm:1023
-#: fGLSViewer.dfm:1169 fGLSViewer.dfm:1409
-msgid "Z&oom Out"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:620 fcGLSViewer.dfm:763 fcGLSViewer.dfm:908
-#: fcGLSViewer.dfm:1149 fGLSViewer.dfm:886 fGLSViewer.dfm:1029
-#: fGLSViewer.dfm:1174 fGLSViewer.dfm:1415
-msgid "&Reset View"
-msgstr ""
-
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:626 fcGLSViewer.dfm:911 fGLSViewer.dfm:892
-#: fGLSViewer.dfm:1177
-msgid "&View"
-msgstr "Вид"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:632 fcGLSViewer.dfm:973 fGLSViewer.dfm:898
-#: fGLSViewer.dfm:1239
-msgid "&Options..."
-msgstr "&Опции..."
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:636 fcGLSViewer.dfm:977 fGLSViewer.dfm:902
-#: fGLSViewer.dfm:1243
-msgid "&Face Culling"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:640 fcGLSViewer.dfm:774 fcGLSViewer.dfm:981
-#: fcGLSViewer.dfm:1081 fGLSViewer.dfm:906 fGLSViewer.dfm:1040
-#: fGLSViewer.dfm:1247 fGLSViewer.dfm:1347
-msgid "&Texturing"
-msgstr "&Тесктурирование"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:645 fcGLSViewer.dfm:780 fcGLSViewer.dfm:986
-#: fcGLSViewer.dfm:1087 fGLSViewer.dfm:911 fGLSViewer.dfm:1046
-#: fGLSViewer.dfm:1252 fGLSViewer.dfm:1353
-msgid "&Lighting"
-msgstr "&Освещение"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:650 fcGLSViewer.dfm:1155 fGLSViewer.dfm:916
-#: fGLSViewer.dfm:1421
-msgid "&Navi Cube"
-msgstr "&Куб навигации"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:658 fcGLSViewer.dfm:997 fGLSViewer.dfm:924
-#: fGLSViewer.dfm:1263
-msgid "&Show FPS"
-msgstr "&Показать ЧКС"
-
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:660 fcGLSViewer.dfm:999 fGLSViewer.dfm:926
-#: fGLSViewer.dfm:1265
-msgid "&Tools"
-msgstr "&Настройки"
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:674 fcGLSViewer.dfm:1013 fGLSViewer.dfm:940
-#: fGLSViewer.dfm:1279
-msgid "&GLScene Home Page"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:681 fcGLSViewer.dfm:1020 fGLSViewer.dfm:947
-#: fGLSViewer.dfm:1286
-msgid "&About..."
-msgstr "&О программе..."
-
-#. FormViewer..ActionManager..........Caption
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:683 fcGLSViewer.dfm:1022 fGLSViewer.dfm:949
-#: fGLSViewer.dfm:1288
-msgid "&Help"
-msgstr "&Справка"
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:919 fGLSViewer.dfm:1185
-msgid "&Default"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:923 fGLSViewer.dfm:1189
-msgid "&MSAA 2X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:927 fGLSViewer.dfm:1193
-msgid "M&SAA 4X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:931 fGLSViewer.dfm:1197
-msgid "MS&AA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:935 fGLSViewer.dfm:1201
-msgid "MSAA &16X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:939 fGLSViewer.dfm:1205
-msgid "&CSAA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..................Caption
-#. FormGLSViewer..ActionManager..................Caption
-#: fcGLSViewer.dfm:943 fGLSViewer.dfm:1209
-msgid "CSAA 1&6X"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:945 fGLSViewer.dfm:1211
-msgid "&Antialiasing"
-msgstr "&Антиалиасинг"
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:949 fGLSViewer.dfm:1215
-msgid "&Optimize Mesh"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:953 fGLSViewer.dfm:1219
-msgid "&Invert Normals"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:957 fGLSViewer.dfm:1223
-msgid "&Reverse Rendering Order"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:961 fGLSViewer.dfm:1227
-msgid "&Convert to Indexed Triangles"
-msgstr ""
-
-#. FormViewer..ActionManager..............Caption
-#. FormGLSViewer..ActionManager..............Caption
-#: fcGLSViewer.dfm:965 fGLSViewer.dfm:1231
-msgid "&Stripify"
-msgstr ""
-
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:967 fGLSViewer.dfm:1233
-msgid "&Processing"
-msgstr ""
-
-#. FormViewer..ActionManager..........Caption
-#. FormGLSViewer..ActionManager..........Caption
-#: fcGLSViewer.dfm:1093 fGLSViewer.dfm:1359
-msgid "&Info..."
-msgstr ""
-
-#. FormViewer..ActionManager..StyleName
-#. FormGLSViewer..ActionManager..StyleName
-#: fcGLSViewer.dfm:1185 fGLSViewer.dfm:1451
-msgid "Standard"
-msgstr ""
-
-#. FormViewer..ActionManager..acOptimizeMesh..Category
-#. FormViewer..ActionManager..acProcessInvertNormals..Category
-#. FormViewer..ActionManager..acReverseRendering..Category
-#. FormViewer..ActionManager..acConvertToTriangles..Category
-#. FormViewer..ActionManager..acProcessStripify..Category
-#. FormGLSViewer..ActionManager..acOptimizeMesh..Category
-#. FormGLSViewer..ActionManager..acProcessInvertNormals..Category
-#. FormGLSViewer..ActionManager..acReverseRendering..Category
-#. FormGLSViewer..ActionManager..acConvertToTriangles..Category
-#. FormGLSViewer..ActionManager..acProcessStripify..Category
-#: fcGLSViewer.dfm:1187 fcGLSViewer.dfm:1192 fcGLSViewer.dfm:1197
-#: fcGLSViewer.dfm:1202 fcGLSViewer.dfm:1207 fGLSViewer.dfm:1453
-#: fGLSViewer.dfm:1459 fGLSViewer.dfm:1465 fGLSViewer.dfm:1471
-#: fGLSViewer.dfm:1477
-msgid "Processing"
-msgstr ""
-
-#. FormViewer..ActionManager..acOptimizeMesh..Caption
-#. FormGLSViewer..ActionManager..acOptimizeMesh..Caption
-#: fcGLSViewer.dfm:1188 fGLSViewer.dfm:1454
-msgid "Optimize Mesh"
-msgstr "Оптимизировать меш"
-
-#. FormViewer..ActionManager..acOptimizeMesh..Hint
-#. FormGLSViewer..ActionManager..acOptimizeMesh..Hint
-#: fcGLSViewer.dfm:1189 fGLSViewer.dfm:1455
-msgid "Optimize mesh"
-msgstr ""
-
-#. FormViewer..ActionManager..acProcessInvertNormals..Caption
-#. FormGLSViewer..ActionManager..acProcessInvertNormals..Caption
-#: fcGLSViewer.dfm:1193 fGLSViewer.dfm:1460
-msgid "Invert Normals"
-msgstr "Инвертировать нормали"
-
-#. FormViewer..ActionManager..acProcessInvertNormals..Hint
-#. FormGLSViewer..ActionManager..acProcessInvertNormals..Hint
-#: fcGLSViewer.dfm:1194 fGLSViewer.dfm:1461
-msgid "Invert normals"
-msgstr ""
-
-#. FormViewer..ActionManager..acReverseRendering..Caption
-#. FormGLSViewer..ActionManager..acReverseRendering..Caption
-#: fcGLSViewer.dfm:1198 fGLSViewer.dfm:1466
-msgid "Reverse Rendering Order"
-msgstr ""
-
-#. FormViewer..ActionManager..acReverseRendering..Hint
-#. FormGLSViewer..ActionManager..acReverseRendering..Hint
-#: fcGLSViewer.dfm:1199 fGLSViewer.dfm:1467
-msgid "Reverse rendering order"
-msgstr ""
-
-#. FormViewer..ActionManager..acConvertToTriangles..Caption
-#. FormGLSViewer..ActionManager..acConvertToTriangles..Caption
-#: fcGLSViewer.dfm:1203 fGLSViewer.dfm:1472
-msgid "Convert to Indexed Triangles"
-msgstr ""
-
-#. FormViewer..ActionManager..acConvertToTriangles..Hint
-#. FormGLSViewer..ActionManager..acConvertToTriangles..Hint
-#: fcGLSViewer.dfm:1204 fGLSViewer.dfm:1473
-msgid "Convert  to indexed triangles"
-msgstr ""
-
-#. FormViewer..ActionManager..acProcessStripify..Caption
-#. FormViewer..ActionManager..acProcessStripify..Hint
-#. FormGLSViewer..ActionManager..acProcessStripify..Caption
-#. FormGLSViewer..ActionManager..acProcessStripify..Hint
-#: fcGLSViewer.dfm:1208 fcGLSViewer.dfm:1209 fGLSViewer.dfm:1478
-#: fGLSViewer.dfm:1479
-msgid "Stripify"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsOptions..Caption
-#. FormGLSViewer..ActionManager..acToolsOptions..Caption
-#: fcGLSViewer.dfm:1213 fGLSViewer.dfm:1484
-msgid "Options..."
-msgstr "Опции..."
-
-#. FormViewer..ActionManager..acToolsOptions..Hint
-#. FormGLSViewer..ActionManager..acToolsOptions..Hint
-#: fcGLSViewer.dfm:1214 fGLSViewer.dfm:1485
-msgid "Tools|Options..."
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsFaceCulling..Caption
-#. FormGLSViewer..ActionManager..acToolsFaceCulling..Caption
-#: fcGLSViewer.dfm:1218 fGLSViewer.dfm:1490
-msgid "Face Culling"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsTexturing..Caption
-#. FormViewer..ActionManager..acToolsTexturing..Hint
-#. FormGLSViewer..ActionManager..acToolsTexturing..Caption
-#. FormGLSViewer..ActionManager..acToolsTexturing..Hint
-#: fcGLSViewer.dfm:1222 fcGLSViewer.dfm:1224 fGLSViewer.dfm:1495
-#: fGLSViewer.dfm:1497
-msgid "Texturing"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsLighting..Caption
-#. FormViewer..ActionManager..acToolsLighting..Hint
-#. FormGLSViewer..ActionManager..acToolsLighting..Caption
-#. FormGLSViewer..ActionManager..acToolsLighting..Hint
-#: fcGLSViewer.dfm:1229 fcGLSViewer.dfm:1231 fGLSViewer.dfm:1503
-#: fGLSViewer.dfm:1505
-msgid "Lighting"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsNaviCube..Caption
-#. FormViewer..ActionManager..acToolsNaviCube..Hint
-#. FormGLSViewer..ActionManager..acToolsNaviCube..Caption
-#. FormGLSViewer..ActionManager..acToolsNaviCube..Hint
-#: fcGLSViewer.dfm:1236 fcGLSViewer.dfm:1237 fGLSViewer.dfm:1511
-#: fGLSViewer.dfm:1512
-msgid "Navi Cube"
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsCustomize..Caption
-#. FormGLSViewer..ActionManager..acToolsCustomize..Caption
-#: fcGLSViewer.dfm:1242 fGLSViewer.dfm:1518
-msgid "&Customize..."
-msgstr ""
-
-#. FormViewer..ActionManager..acToolsShowFPS..Caption
-#. FormGLSViewer..ActionManager..acToolsShowFPS..Caption
-#: fcGLSViewer.dfm:1247 fGLSViewer.dfm:1523
-msgid "Show FPS"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewSmoothShading..Caption
-#. FormGLSViewer..ActionManager..acViewSmoothShading..Caption
-#: fcGLSViewer.dfm:1252 fGLSViewer.dfm:1529
-msgid "&Smooth Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewSmoothShading..Hint
-#. FormGLSViewer..ActionManager..acViewSmoothShading..Hint
-#: fcGLSViewer.dfm:1255 fGLSViewer.dfm:1532
-msgid "Smooth shading|Smooth shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewFlatShading..Caption
-#. FormGLSViewer..ActionManager..acViewFlatShading..Caption
-#: fcGLSViewer.dfm:1261 fGLSViewer.dfm:1539
-msgid "Flat Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewFlatShading..Hint
-#. FormGLSViewer..ActionManager..acViewFlatShading..Hint
-#: fcGLSViewer.dfm:1264 fGLSViewer.dfm:1542
-msgid "Flat Shading|Flat Shading"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewFlatLines..Caption
-#. FormViewer..ActionManager..acViewFlatLines..Hint
-#. FormGLSViewer..ActionManager..acViewFlatLines..Caption
-#. FormGLSViewer..ActionManager..acViewFlatLines..Hint
-#: fcGLSViewer.dfm:1270 fcGLSViewer.dfm:1273 fGLSViewer.dfm:1549
-#: fGLSViewer.dfm:1552
-msgid "Flat Shading with Lines"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewHiddenLines..Caption
-#. FormViewer..ActionManager..acViewHiddenLines..Hint
-#. FormGLSViewer..ActionManager..acViewHiddenLines..Caption
-#. FormGLSViewer..ActionManager..acViewHiddenLines..Hint
-#: fcGLSViewer.dfm:1279 fcGLSViewer.dfm:1282 fGLSViewer.dfm:1559
-#: fGLSViewer.dfm:1562
-msgid "Hidden Lines"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewWireFrame..Caption
-#. FormViewer..ActionManager..acViewWireFrame..Hint
-#. FormGLSViewer..ActionManager..acViewWireFrame..Caption
-#. FormGLSViewer..ActionManager..acViewWireFrame..Hint
-#: fcGLSViewer.dfm:1288 fcGLSViewer.dfm:1291 fGLSViewer.dfm:1569
-#: fGLSViewer.dfm:1572
-msgid "Wireframe"
-msgstr "Каркас"
-
-#. FormViewer..ActionManager..acViewZoomIn..Caption
-#. FormViewer..ActionManager..acViewZoomIn..Hint
-#. FormGLSViewer..ActionManager..acViewZoomIn..Caption
-#. FormGLSViewer..ActionManager..acViewZoomIn..Hint
-#: fcGLSViewer.dfm:1296 fcGLSViewer.dfm:1297 fGLSViewer.dfm:1578
-#: fGLSViewer.dfm:1579
-msgid "Zoom In"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewZoomOut..Caption
-#. FormViewer..ActionManager..acViewZoomOut..Hint
-#. FormGLSViewer..ActionManager..acViewZoomOut..Caption
-#. FormGLSViewer..ActionManager..acViewZoomOut..Hint
-#: fcGLSViewer.dfm:1302 fcGLSViewer.dfm:1303 fGLSViewer.dfm:1585
-#: fGLSViewer.dfm:1586
-msgid "Zoom Out"
-msgstr ""
-
-#. FormViewer..ActionManager..acViewReset..Caption
-#. FormViewer..ActionManager..acViewReset..Hint
-#. FormGLSViewer..ActionManager..acViewReset..Caption
-#. FormGLSViewer..ActionManager..acViewReset..Hint
-#: fcGLSViewer.dfm:1308 fcGLSViewer.dfm:1309 fGLSViewer.dfm:1592
-#: fGLSViewer.dfm:1593
-msgid "Reset View"
-msgstr ""
-
-#. FormViewer..ActionManager..acFileOpen..Caption
-#. FormGLSViewer..ActionManager..acFileOpen..Caption
-#: fcGLSViewer.dfm:1314 fGLSViewer.dfm:1599
-msgid "&Open..."
-msgstr "&Открыть..."
-
-#. FormViewer..ActionManager..acFileOpen..Hint
-#. FormGLSViewer..ActionManager..acFileOpen..Hint
-#: fcGLSViewer.dfm:1316 fGLSViewer.dfm:1601
-msgid "Open"
-msgstr ""
-
-#. FormViewer..ActionManager..acFilePick..Caption
-#. FormGLSViewer..ActionManager..acFilePick..Caption
-#: fcGLSViewer.dfm:1321 fGLSViewer.dfm:1607
-msgid "Pick texture..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFilePick..Hint
-#. FormGLSViewer..ActionManager..acFilePick..Hint
-#: fcGLSViewer.dfm:1322 fGLSViewer.dfm:1608
-msgid "Pick texture"
-msgstr ""
-
-#. FormViewer..ActionManager..acFileOpenTexLib..Caption
-#. FormGLSViewer..ActionManager..acFileOpenTexLib..Caption
-#: fcGLSViewer.dfm:1327 fGLSViewer.dfm:1614
-msgid "Open Texture Library..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFileOpenTexLib..Hint
-#. FormGLSViewer..ActionManager..acFileOpenTexLib..Hint
-#: fcGLSViewer.dfm:1328 fGLSViewer.dfm:1615
-msgid "Open texture library"
-msgstr ""
-
-#. FormViewer..ActionManager..acFileSaveAs..Caption
-#. FormGLSViewer..ActionManager..acFileSaveAs..Caption
-#: fcGLSViewer.dfm:1332 fGLSViewer.dfm:1620
-msgid "Save As..."
-msgstr "Сокранить как..."
-
-#. FormViewer..ActionManager..acFileSaveAs..Hint
-#. FormGLSViewer..ActionManager..acFileSaveAs..Hint
-#: fcGLSViewer.dfm:1333 fGLSViewer.dfm:1621
-msgid "Save as"
-msgstr "Сохранить как"
-
-#. FormViewer..ActionManager..acFileSaveTextures..Caption
-#. FormGLSViewer..ActionManager..acFileSaveTextures..Caption
-#: fcGLSViewer.dfm:1338 fGLSViewer.dfm:1628
-msgid "Save Textures..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFileSaveTextures..Hint
-#. FormGLSViewer..ActionManager..acFileSaveTextures..Hint
-#: fcGLSViewer.dfm:1340 fGLSViewer.dfm:1630
-msgid "Save textures..."
-msgstr "Сохранить текстуры..."
-
-#. FormViewer..ActionManager..acSaveTreeView..Caption
-#. FormGLSViewer..ActionManager..acSaveTreeView..Caption
-#: fcGLSViewer.dfm:1344 fGLSViewer.dfm:1635
-msgid "&SaveTreeView..."
-msgstr ""
-
-#. FormViewer..ActionManager..acLoadTreeView..Caption
-#. FormGLSViewer..ActionManager..acLoadTreeView..Caption
-#: fcGLSViewer.dfm:1348 fGLSViewer.dfm:1640
-msgid "&LoadTreeView..."
-msgstr ""
-
-#. FormViewer..ActionManager..acFileExit..Caption
-#. FormViewer..ActionManager..acFileExit..Hint
-#. FormGLSViewer..ActionManager..acFileExit..Caption
-#. FormGLSViewer..ActionManager..acFileExit..Hint
-#: fcGLSViewer.dfm:1352 fcGLSViewer.dfm:1353 fGLSViewer.dfm:1645
-#: fGLSViewer.dfm:1646
-msgid "Exit"
-msgstr "Выход"
-
-#. FormViewer..ActionManager..acHelpContents..Category
-#. FormViewer..ActionManager..acHelpTopicSearch..Category
-#. FormViewer..ActionManager..acHelpGLSHomePage..Category
-#. FormViewer..ActionManager..acHelpAbout..Category
-#. GLDialog..PanelBottom..ButtonHelp..Caption
-#. FormGLSViewer..ActionManager..acHelpContents..Category
-#. FormGLSViewer..ActionManager..acHelpTopicSearch..Category
-#. FormGLSViewer..ActionManager..acHelpGLSHomePage..Category
-#. FormGLSViewer..ActionManager..acHelpAbout..Category
-#: fcGLSViewer.dfm:1356 fcGLSViewer.dfm:1363 fcGLSViewer.dfm:1370
-#: fcGLSViewer.dfm:1375 fGLDialog.dfm:75 fGLSViewer.dfm:1650
-#: fGLSViewer.dfm:1658 fGLSViewer.dfm:1666 fGLSViewer.dfm:1672
-msgid "Help"
-msgstr "Справка"
-
-#. FormViewer..ActionManager..acHelpContents..Caption
-#. FormGLSViewer..ActionManager..acHelpContents..Caption
-#: fcGLSViewer.dfm:1357 fGLSViewer.dfm:1651
-msgid "&Contents"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpContents..Hint
-#. FormGLSViewer..ActionManager..acHelpContents..Hint
-#: fcGLSViewer.dfm:1359 fGLSViewer.dfm:1653
-msgid "Contents|Help Contents"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpTopicSearch..Caption
-#. FormGLSViewer..ActionManager..acHelpTopicSearch..Caption
-#: fcGLSViewer.dfm:1364 fGLSViewer.dfm:1659
-msgid "&Topic Search"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpTopicSearch..Hint
-#. FormGLSViewer..ActionManager..acHelpTopicSearch..Hint
-#: fcGLSViewer.dfm:1366 fGLSViewer.dfm:1661
-msgid "Help|Topic Search"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpGLSHomePage..Caption
-#. FormGLSViewer..ActionManager..acHelpGLSHomePage..Caption
-#: fcGLSViewer.dfm:1371 fGLSViewer.dfm:1667
-msgid "GLScene Home Page"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpGLSHomePage..Hint
-#. FormGLSViewer..ActionManager..acHelpGLSHomePage..Hint
-#: fcGLSViewer.dfm:1372 fGLSViewer.dfm:1668
-msgid "Help|Home page"
-msgstr ""
-
-#. FormViewer..ActionManager..acHelpAbout..Caption
-#. FormGLSViewer..ActionManager..acHelpAbout..Caption
-#: fcGLSViewer.dfm:1376 fGLSViewer.dfm:1673
-msgid "About..."
-msgstr "О программе..."
-
-#. FormViewer..ActionManager..acHelpAbout..Hint
-#. FormGLSViewer..ActionManager..acHelpAbout..Hint
-#: fcGLSViewer.dfm:1377 fGLSViewer.dfm:1674
-msgid "Help|About..."
-msgstr ""
-
-#. FormViewer..ActionManager..acAADefault..Category
-#. FormViewer..ActionManager..acAA2X..Category
-#. FormViewer..ActionManager..acAA4X..Category
-#. FormViewer..ActionManager..acAA8X..Category
-#. FormViewer..ActionManager..acAA16X..Category
-#. FormViewer..ActionManager..acCSA8X..Category
-#. FormViewer..ActionManager..acCSA16X..Category
-#. FormGLSViewer..ActionManager..acAADefault..Category
-#. FormGLSViewer..ActionManager..acAA2X..Category
-#. FormGLSViewer..ActionManager..acAA4X..Category
-#. FormGLSViewer..ActionManager..acAA8X..Category
-#. FormGLSViewer..ActionManager..acAA16X..Category
-#. FormGLSViewer..ActionManager..acCSA8X..Category
-#. FormGLSViewer..ActionManager..acCSA16X..Category
-#: fcGLSViewer.dfm:1380 fcGLSViewer.dfm:1388 fcGLSViewer.dfm:1394
-#: fcGLSViewer.dfm:1441 fcGLSViewer.dfm:1446 fcGLSViewer.dfm:1452
-#: fcGLSViewer.dfm:1457 fGLSViewer.dfm:1678 fGLSViewer.dfm:1687
-#: fGLSViewer.dfm:1693 fGLSViewer.dfm:1740 fGLSViewer.dfm:1745
-#: fGLSViewer.dfm:1751 fGLSViewer.dfm:1756
-msgid "Antialiasing"
-msgstr ""
-
-#. FormViewer..ActionManager..acAADefault..Caption
-#. FormGLSViewer..ActionManager..acAADefault..Caption
-#: fcGLSViewer.dfm:1382 fGLSViewer.dfm:1680
-msgid "Default"
-msgstr ""
-
-#. FormViewer..ActionManager..acAADefault..Hint
-#. FormGLSViewer..ActionManager..acAADefault..Hint
-#: fcGLSViewer.dfm:1385 fGLSViewer.dfm:1683
-msgid "Default|Default antialiacing"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA2X..Caption
-#. FormGLSViewer..ActionManager..acAA2X..Caption
-#: fcGLSViewer.dfm:1390 fGLSViewer.dfm:1689
-msgid "MSAA 2X"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA4X..Caption
-#. FormGLSViewer..ActionManager..acAA4X..Caption
-#: fcGLSViewer.dfm:1396 fGLSViewer.dfm:1695
-msgid "MSAA 4X"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditUndo..Category
-#. FormViewer..ActionManager..acEditCut..Category
-#. FormViewer..ActionManager..acEditCopy..Category
-#. FormViewer..ActionManager..acEditPaste..Category
-#. FormViewer..ActionManager..acEditSelectAll..Category
-#. FormViewer..ActionManager..acEditDelete..Category
-#. FormGLSViewer..ActionManager..acEditUndo..Category
-#. FormGLSViewer..ActionManager..acEditCut..Category
-#. FormGLSViewer..ActionManager..acEditCopy..Category
-#. FormGLSViewer..ActionManager..acEditPaste..Category
-#. FormGLSViewer..ActionManager..acEditSelectAll..Category
-#. FormGLSViewer..ActionManager..acEditDelete..Category
-#. FormGLSViewer..ActionManager..acClear..Category
-#: fcGLSViewer.dfm:1400 fcGLSViewer.dfm:1407 fcGLSViewer.dfm:1414
-#: fcGLSViewer.dfm:1421 fcGLSViewer.dfm:1428 fcGLSViewer.dfm:1434
-#: fGLSViewer.dfm:1699 fGLSViewer.dfm:1706 fGLSViewer.dfm:1713
-#: fGLSViewer.dfm:1720 fGLSViewer.dfm:1727 fGLSViewer.dfm:1733
-#: fGLSViewer.dfm:1780
-msgid "Edit"
-msgstr "Правка"
-
-#. FormViewer..ActionManager..acEditUndo..Caption
-#. FormGLSViewer..ActionManager..acEditUndo..Caption
-#: fcGLSViewer.dfm:1401 fGLSViewer.dfm:1700
-msgid "&Undo"
-msgstr "&Отмена"
-
-#. FormViewer..ActionManager..acEditUndo..Hint
-#. FormGLSViewer..ActionManager..acEditUndo..Hint
-#: fcGLSViewer.dfm:1402 fGLSViewer.dfm:1701
-msgid "Undo|Reverts"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCut..Caption
-#. FormGLSViewer..ActionManager..acEditCut..Caption
-#: fcGLSViewer.dfm:1408 fGLSViewer.dfm:1707
-msgid "Cu&t"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCut..Hint
-#. FormGLSViewer..ActionManager..acEditCut..Hint
-#: fcGLSViewer.dfm:1409 fGLSViewer.dfm:1708
-msgid "Cut|Cut the selection and puts it on the Clipboard"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCopy..Caption
-#. FormGLSViewer..ActionManager..acEditCopy..Caption
-#: fcGLSViewer.dfm:1415 fGLSViewer.dfm:1714
-msgid "&Copy"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditCopy..Hint
-#. FormGLSViewer..ActionManager..acEditCopy..Hint
-#: fcGLSViewer.dfm:1416 fGLSViewer.dfm:1715
-msgid "Copy|Copies the selection and puts it on the Clipboard"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditPaste..Caption
-#. FormGLSViewer..ActionManager..acEditPaste..Caption
-#: fcGLSViewer.dfm:1422 fGLSViewer.dfm:1721
-msgid "&Paste"
-msgstr "&Вставка"
-
-#. FormViewer..ActionManager..acEditPaste..Hint
-#. FormGLSViewer..ActionManager..acEditPaste..Hint
-#: fcGLSViewer.dfm:1423 fGLSViewer.dfm:1722
-msgid "Paste|Inserts Clipboard contents"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditSelectAll..Caption
-#. FormGLSViewer..ActionManager..acEditSelectAll..Caption
-#: fcGLSViewer.dfm:1429 fGLSViewer.dfm:1728
-msgid "Select &All"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditSelectAll..Hint
-#. FormGLSViewer..ActionManager..acEditSelectAll..Hint
-#: fcGLSViewer.dfm:1430 fGLSViewer.dfm:1729
-msgid "Select All|Selects the entire document"
-msgstr ""
-
-#. FormViewer..ActionManager..acEditDelete..Caption
-#. FormGLSViewer..ActionManager..acEditDelete..Caption
-#: fcGLSViewer.dfm:1435 fGLSViewer.dfm:1734
-msgid "&Delete"
-msgstr "&Удалить"
-
-#. FormViewer..ActionManager..acEditDelete..Hint
-#. FormGLSViewer..ActionManager..acEditDelete..Hint
-#: fcGLSViewer.dfm:1436 fGLSViewer.dfm:1735
-msgid "Delete|Erases the selection"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA8X..Caption
-#. FormGLSViewer..ActionManager..acAA8X..Caption
-#: fcGLSViewer.dfm:1442 fGLSViewer.dfm:1741
-msgid "MSAA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..acAA16X..Caption
-#. FormGLSViewer..ActionManager..acAA16X..Caption
-#: fcGLSViewer.dfm:1448 fGLSViewer.dfm:1747
-msgid "MSAA 16X"
-msgstr ""
-
-#. FormViewer..ActionManager..acCSA8X..Caption
-#. FormGLSViewer..ActionManager..acCSA8X..Caption
-#: fcGLSViewer.dfm:1453 fGLSViewer.dfm:1752
-msgid "CSAA 8X"
-msgstr ""
-
-#. FormViewer..ActionManager..acCSA16X..Caption
-#. FormGLSViewer..ActionManager..acCSA16X..Caption
-#: fcGLSViewer.dfm:1458 fGLSViewer.dfm:1757
-msgid "CSAA 16X"
-msgstr ""
-
-#. FormViewer..ActionManager..acPoints..Caption
-#. FormViewer..ActionManager..acPoints..Hint
-#. FormGLSViewer..ActionManager..acPoints..Hint
-#: fcGLSViewer.dfm:1463 fcGLSViewer.dfm:1464 fGLSViewer.dfm:1763
-msgid "Points"
-msgstr "Точки"
-
-#. FormViewer..ActionManager..acToolsInfo..Caption
-#. FormGLSViewer..ActionManager..acToolsInfo..Caption
-#: fcGLSViewer.dfm:1469 fGLSViewer.dfm:1769
-msgid "Info..."
-msgstr "Инфо..."
-
-#. FormViewer..ActionManager..acToolsInfo..Hint
-#. FormGLSViewer..ActionManager..acToolsInfo..Hint
-#: fcGLSViewer.dfm:1470 fGLSViewer.dfm:1770
-msgid "Info of objects"
-msgstr ""
-
-#. FormViewer..ActionManager..acSpheres..Caption
-#: fcGLSViewer.dfm:1475
-msgid "Spheres"
-msgstr "Сферы"
-
-#. FormViewer..GLSimpleNavigation..FormCaption
-#. FormGLSViewer..GLSimpleNavigation..FormCaption
-#: fcGLSViewer.dfm:2288 fGLSViewer.dfm:2605
-msgid "GLSViewer - %FPS"
-msgstr ""
-
-#. GLAbout..Caption
-#: fGLAbout.dfm:2
-msgid "About"
-msgstr "&О программе"
-
-#. GLAbout..PanelTop..LabelVersion..Caption
-#: fGLAbout.dfm:140
-msgid "version"
-msgstr "версия"
-
-#. GLAbout..PanelTop..LabelGeoblock..Caption
-#: fGLAbout.dfm:154
-msgid "GLScene Viewer"
-msgstr ""
-
-#. GLAbout..PanelTop..LabelGeoblock..Font.Name
-#: fGLAbout.dfm:158
-msgid "Times New Roman"
-msgstr ""
-
-#. GLAbout..PanelMiddle..LabelCopyright..Caption
-#: fGLAbout.dfm:184
-msgid "Copyright"
-msgstr ""
-
-#. GLAbout..PanelMiddle..imgOpenGL..Hint
-#: fGLAbout.dfm:198
-msgid "www.opengl.org"
-msgstr ""
-
-#. GLAbout..PanelMiddle..imgSourceForge..Hint
-#: fGLAbout.dfm:383
-msgid "www.sourceforge.net/projects/glscene"
-msgstr ""
-
-#. GLAbout..PanelMiddle..imgGLScene..Hint
-#: fGLAbout.dfm:548
-msgid "www.glscene.org"
-msgstr ""
-
-#. GLAbout..PanelMiddle..Label1..Caption
-#: fGLAbout.dfm:2391
-msgid "GLScene Team"
-msgstr ""
-
-#. GLAbout..PanelMiddle..Label3..Caption
-#: fGLAbout.dfm:2398
-msgid "3D view, 3D file formats support:"
-msgstr ""
-
-#. GLAbout..PanelMiddle..FreeAndOpenSource..Caption
-#: fGLAbout.dfm:2405
-msgid "Open source software"
-msgstr ""
-
-#. GLDialog..Caption
-#: fGLDialog.dfm:3
-msgid "GLScene Dialog"
-msgstr ""
-
-#. GLDialog..PanelBottom..ButtonOK..Caption
-#: fGLDialog.dfm:57
-msgid "OK"
-msgstr ""
-
-#. GLDialog..PanelBottom..ButtonCancel..Caption
-#: fGLDialog.dfm:66
-msgid "Cancel"
-msgstr "Отмена"
-
-#. FormOptions..Caption
-#: fGLOptions.dfm:3
-msgid "Options"
-msgstr "Опции"
-
-#. FormOptions..rgLanguage..Caption
-#: fGLOptions.dfm:24
-msgid "Language"
-msgstr "Язык"
-
-#. FormOptions..rgLanguage....Items.Strings
-#: fGLOptions.dfm:28
-msgid "English"
-msgstr "Английский"
-
-#. FormOptions..rgLanguage....Items.Strings
-#: fGLOptions.dfm:29
-msgid "Russian"
-msgstr "Русский"
-
-#. FormOptions..rgLanguage....Items.Strings
-#: fGLOptions.dfm:30
-msgid "Spanish"
-msgstr "Испанский"
-
-#. FormOptions..CheckBoxAxis..Caption
-#: fGLOptions.dfm:43
-msgid "Axis"
-msgstr ""
-
-#. FormOptions..ButtonOk..Caption
-#: fGLOptions.dfm:69
-msgid "Ok"
-msgstr ""
-
-#. FormGLSViewer..Scene..dcWorld..Tree..LeafMaterialName
-#: fGLSViewer.dfm:717
-msgid "LeafFront"
-msgstr ""
-
-#. FormGLSViewer..Scene..dcWorld..Tree..LeafBackMaterialName
-#: fGLSViewer.dfm:718
-msgid "LeafBack"
-msgstr ""
-
-#. FormGLSViewer..Scene..dcWorld..Tree..BranchMaterialName
-#. FormGLSViewer..MLTree......Name
-#: fGLSViewer.dfm:719 fGLSViewer.dfm:2625
-msgid "TreeBark"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:829
-msgid "R&andom Points"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:834
-msgid "Ra&ndom Spheres"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:838
-msgid "Lan&dscape Hills"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..............Caption
-#: fGLSViewer.dfm:842
-msgid "Roo&m with Objects"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..acPoints..Caption
-#: fGLSViewer.dfm:1762
-msgid "Random Points"
-msgstr "Случайные точки"
-
-#. FormGLSViewer..ActionManager..acSpheres..Caption
-#: fGLSViewer.dfm:1776
-msgid "Random Spheres"
-msgstr "Случайные сферы"
-
-#. FormGLSViewer..ActionManager..acClear..Caption
-#: fGLSViewer.dfm:1781
-msgid "Clear"
-msgstr "Очситить"
-
-#. FormGLSViewer..ActionManager..acLandscape..Caption
-#: fGLSViewer.dfm:1785
-msgid "Landscape Hills"
-msgstr ""
-
-#. FormGLSViewer..ActionManager..acRoom..Caption
-#: fGLSViewer.dfm:1790
-msgid "Room with Objects"
-msgstr "Комната с объектами"
-
-#. FormGLSViewer..MLTree......Material.Texture.ImageClassName
-#. FormGLSViewer..MLTree......Material.Texture.ImageClassName
-#: fGLSViewer.dfm:2627 fGLSViewer.dfm:2633
-msgid "TGLPicFileImage"
-msgstr ""
-
-#. FormGLSViewer..MLTree......Name
-#: fGLSViewer.dfm:2631
-msgid "LeafTexture"
-msgstr ""
-
-#. FormGLSViewer..MLTree......Material.Texture.Image.PictureFileName
-#: fGLSViewer.dfm:2634
-msgid "..\\..\\..\\Texture\\leaf.tga"
-msgstr ""
-
-#. FormGLSViewer..MLTree......Name
-#: fGLSViewer.dfm:2637
-msgid "FruitTexture"
-msgstr ""
-
-#: fGLOptions.pas:141
-msgid "Reload to change language"
-msgstr "Перезагрузите для изменения языка"
-
-#: fGLSViewer.pas:453
-msgid "Unsupported or unspecified file extension."
-msgstr ""

TEMPAT SAMPAH
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/languages.mo


+ 0 - 67
Examples/AdvDemos/GLSViewer/Locale/ru/LC_MESSAGES/languages.po

@@ -1,67 +0,0 @@
-# GLScene Languages.
-#
-# This file is distributed under the same license as GLScene
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-# Translators:
-# Pavel Vassiliev <[email protected]>, 2023
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: GLScene Languages\n"
-"POT-Creation-Date: 2023-01-01 16:26\n"
-"PO-Revision-Date: 2024-05-23 13:27+0300\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
-"X-Generator: Poedit 3.4.4\n"
-
-msgid "Arabic"
-msgstr "Арабский"
-
-#. Language of China
-msgid "Chinese"
-msgstr "Китайский"
-
-msgid "English"
-msgstr "Английский"
-
-#. Language of France
-msgid "French"
-msgstr "Французский"
-
-#. Language of Germany
-msgid "German"
-msgstr "Немецкий"
-
-#. Language of Greece
-msgid "Greek"
-msgstr "Греческий"
-
-#. Language of Italy
-msgid "Italian"
-msgstr "Итальянский"
-
-#. Language of Iran
-msgid "Persian"
-msgstr "Персидский"
-
-#. Language of Japan
-msgid "Japanese"
-msgstr "Японский"
-
-#. Language of Portugal
-msgid "Portuguese"
-msgstr "Португальский"
-
-#. Language of Russia
-msgid "Russian"
-msgstr "Русский"
-
-#. Language of Spain
-msgid "Spanish"
-msgstr "Испанский"

+ 0 - 1
Examples/AdvDemos/GLSViewer/Source/fGLForm.dfm

@@ -12,6 +12,5 @@ object GLForm: TGLForm
   Font.Style = []
   Position = poMainFormCenter
   Scaled = False
-  OnCreate = FormCreate
   TextHeight = 21
 end

+ 4 - 61
Examples/AdvDemos/GLSViewer/Source/fGLForm.pas

@@ -16,90 +16,33 @@ uses
   Vcl.Graphics,
   Vcl.Menus,
   Vcl.Actnlist,
-
-  gnuGettext;
+  uGlobals
+  ;
 
 type
   TGLForm = class(TForm)
-    procedure FormCreate(Sender: TObject);
   private
      
   public
     IniFile : TIniFile;
     procedure ReadIniFile; virtual;
-    procedure SetLanguage;
   end;
 
 var
   GLForm: TGLForm;
-  LangID : Word;
 
-implementation
+implementation  //---------------------------------------------------------
 
 {$R *.dfm}
 
 //Here goes the translation of all component strings
 //
-procedure TGLForm.FormCreate(Sender: TObject);
-begin
-  SetLanguage;
-end;
-
-//----------------------------------------------------------
-procedure TGLForm.SetLanguage;
-var
-  LocalePath : TFileName;
-  IniFile : TIniFile;
-
-begin
-  LocalePath := ExtractFileDir(ParamStr(0)); // Path to GLSViewer
-  LocalePath := LocalePath + PathDelim + 'Locale' + PathDelim;
-
-  ReadIniFile;
-  if (LangID <> LANG_ENGLISH) then
-  begin
-    Textdomain('glsviewer');
-    BindTextDomain ('glsviewer', LocalePath);
-    AddDomainForResourceString('language');
-    BindTextDomain ('language', LocalePath);
-
-    //TP_GlobalIgnoreClass(TListBox);
-    //TP_GlobalIgnoreClass(TStaticText);
-    //TP_GlobalIgnoreClass(TGLLibMaterial);
-    //TP_GlobalIgnoreClass(TGLMaterialLibrary);
-    // TP_IgnoreClass(TFont);
-    // TP_GlobalIgnoreClassProperty(TAction, 'Category');
-    // Removing the upper line will cause long loading but Action.Category translation
-
-    case LangID of
-      LANG_RUSSIAN:
-      begin
-        UseLanguage('ru');
-        // Help based on demos.htm
-        Application.HelpFile := UpperCase(LocalePath + 'ru'+ PathDelim+'Demos.chm');
-      end
-      else
-      begin
-        UseLanguage('en');
-        Application.HelpFile := UpperCase(LocalePath + 'en'+ PathDelim+'Demos.chm');
-      end;
-    end;
-  end
-  else
-  begin
-    UseLanguage('en');
-    Application.HelpFile := UpperCase(LocalePath + 'en'+ PathDelim+'GLSViewer.chm');
-  end;
-  TranslateComponent(Self);
-end;
-
 procedure TGLForm.ReadIniFile;
 begin
   IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
   with IniFile do
     try
-      // use correct argument names
-      LangID := ReadInteger('FormOptions', 'rgLanguage', 0);
+      LanguageID := ReadInteger('FormOptions', 'rgLanguage', 0);
     finally
       IniFile.Free;
     end;

+ 8 - 27
Examples/AdvDemos/GLSViewer/Source/fGLOptions.dfm

@@ -5,32 +5,13 @@ inherited FormOptions: TFormOptions
   ClientWidth = 460
   Font.Height = -21
   StyleElements = [seFont, seClient, seBorder]
-  OnClick = rgLanguageClick
   OnClose = FormClose
   ExplicitWidth = 476
   ExplicitHeight = 352
-  TextHeight = 25
-  object rgLanguage: TRadioGroup
-    Left = 56
-    Top = 98
-    Width = 351
-    Height = 155
-    Margins.Left = 5
-    Margins.Top = 5
-    Margins.Right = 5
-    Margins.Bottom = 5
-    Caption = 'Language'
-    Columns = 2
-    ItemIndex = 0
-    Items.Strings = (
-      'English'
-      'Russian')
-    TabOrder = 0
-    OnClick = rgLanguageClick
-  end
+  TextHeight = 30
   object CheckBoxAxis: TCheckBox
-    Left = 56
-    Top = 28
+    Left = 80
+    Top = 132
     Width = 183
     Height = 29
     Margins.Left = 5
@@ -38,12 +19,12 @@ inherited FormOptions: TFormOptions
     Margins.Right = 5
     Margins.Bottom = 5
     Caption = 'Axis'
-    TabOrder = 1
+    TabOrder = 0
     OnClick = CheckBoxAxisClick
   end
   object PanelBackground: TPanel
-    Left = 294
-    Top = 22
+    Left = 310
+    Top = 126
     Width = 57
     Height = 40
     Margins.Left = 5
@@ -52,7 +33,7 @@ inherited FormOptions: TFormOptions
     Margins.Bottom = 5
     Color = clBlack
     ParentBackground = False
-    TabOrder = 2
+    TabOrder = 1
     OnClick = PanelBackgroundClick
   end
   object ButtonOk: TButton
@@ -65,7 +46,7 @@ inherited FormOptions: TFormOptions
     Margins.Right = 5
     Margins.Bottom = 5
     Caption = 'Ok'
-    TabOrder = 3
+    TabOrder = 2
     OnClick = ButtonOKClick
   end
 end

+ 6 - 32
Examples/AdvDemos/GLSViewer/Source/fGLOptions.pas

@@ -24,13 +24,11 @@ uses
 
 type
   TFormOptions = class(TGLForm)
-    rgLanguage: TRadioGroup;
     CheckBoxAxis: TCheckBox;
     PanelBackground: TPanel;
     ButtonOk: TButton;
     procedure FormCreate(Sender: TObject);
     procedure FormClose(Sender: TObject; var Action: TCloseAction);
-    procedure rgLanguageClick(Sender: TObject);
     procedure ButtonOKClick(Sender: TObject);
     procedure PanelBackgroundClick(Sender: TObject);
     procedure CheckBoxAxisClick(Sender: TObject);
@@ -50,7 +48,6 @@ implementation
 {$R *.dfm}
 
 uses
-  GnuGettext,
   fGLSViewer;
 
 
@@ -58,7 +55,6 @@ procedure TFormOptions.FormCreate(Sender: TObject);
 begin
   inherited;
   ReadIniFile;
-  SetLanguage;
 end;
 
 procedure TFormOptions.FormClose(Sender: TObject; var Action: TCloseAction);
@@ -75,35 +71,17 @@ begin
     try
       CheckBoxAxis.Checked := ReadBool(Name, CheckBoxAxis.Name, True);
       PanelBackground.Color  := ReadInteger(Name, PanelBackground.Name, 0);
-      LangID := ReadInteger(Name, rgLanguage.Name, 0);
-      case LangID of
-        LANG_ENGLISH : rgLanguage.ItemIndex := 0;
-        LANG_RUSSIAN : rgLanguage.ItemIndex := 1;
-        else
-          rgLanguage.ItemIndex := 0;
-      end;
     finally
       IniFile.Free;
     end;
 end;
 
-procedure TFormOptions.rgLanguageClick(Sender: TObject);
-begin
-  case rgLanguage.ItemIndex of
-    0: CurLangID := LANG_ENGLISH;
-    1: CurLangID := LANG_RUSSIAN;
-    else
-      CurLangID := LANG_ENGLISH;
-  end;
-end;
-
 procedure TFormOptions.WriteIniFile;
 begin
   IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
   with IniFile do
     try
       WriteBool(Name, CheckBoxAxis.Name, CheckBoxAxis.Checked);
-      WriteInteger(Name, rgLanguage.Name, CurLangID);
       WriteInteger(Name, PanelBackground.Name, PanelBackground.Color);
     finally
       IniFile.Free;
@@ -114,9 +92,9 @@ end;
 procedure TFormOptions.CheckBoxAxisClick(Sender: TObject);
 begin
   if CheckBoxAxis.Checked then
-    FormGLSViewer.DCAxis.Visible := True
+    frmGLSViewer.DCAxis.Visible := True
   else
-    FormGLSViewer.DCAxis.Visible := False;
+    frmGLSViewer.DCAxis.Visible := False;
 end;
 
 
@@ -126,7 +104,7 @@ begin
    if dmDialogs.ColorDialog.Execute then
    begin
      PanelBackground.Color :=  dmDialogs.ColorDialog.Color;
-     FormGLSViewer.ApplyBgColor;
+     frmGLSViewer.ApplyBgColor;
    end;
 end;
 
@@ -134,13 +112,9 @@ procedure TFormOptions.ButtonOKClick(Sender: TObject);
 var
   FileName: TFileName;
 begin
-  if CurLangID <> LangID then
-  begin
-    MessageDlg(_('Reload to change language'), mtInformation, [mbOK], 0);
-    FileName := ChangeFileExt(ParamStr(0), '.ini');
-    if FileExists(UpperCase(FileName)) then
-      DeleteFile(UpperCase(FileName)); //to exclude dublicated sections for each language
-  end;
+  FileName := ChangeFileExt(ParamStr(0), '.ini');
+  if FileExists(UpperCase(FileName)) then
+     DeleteFile(UpperCase(FileName)); //to exclude dublicated sections for each language
 end;
 
 end.

+ 6 - 12
Examples/AdvDemos/GLSViewer/Source/fGLSViewer.dfm

@@ -1,4 +1,4 @@
-object FormGLSViewer: TFormGLSViewer
+object frmGLSViewer: TfrmGLSViewer
   Left = 188
   Top = 87
   Caption = 'GLSViewer'
@@ -7,7 +7,7 @@ object FormGLSViewer: TFormGLSViewer
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
-  Font.Height = -11
+  Font.Height = -16
   Font.Name = 'MS Sans Serif'
   Font.Style = []
   Icon.Data = {
@@ -129,7 +129,7 @@ object FormGLSViewer: TFormGLSViewer
   ShowHint = True
   OnCreate = FormCreate
   OnShow = FormShow
-  TextHeight = 13
+  TextHeight = 20
   object StatusBar: TStatusBar
     Left = 0
     Top = 683
@@ -152,8 +152,6 @@ object FormGLSViewer: TFormGLSViewer
         Text = 'Model'
         Width = 40
       end>
-    ExplicitTop = 658
-    ExplicitWidth = 1072
   end
   object snViewer: TGLSceneViewer
     Left = 273
@@ -181,7 +179,6 @@ object FormGLSViewer: TFormGLSViewer
     Height = 29
     Align = alTop
     TabOrder = 2
-    ExplicitWidth = 1072
     object atbTools: TActionToolBar
       Left = 357
       Top = 2
@@ -259,12 +256,11 @@ object FormGLSViewer: TFormGLSViewer
     ColorMap.BtnSelectedFont = clBlack
     ColorMap.UnusedColor = clWhite
     Font.Charset = DEFAULT_CHARSET
-    Font.Color = clBlack
-    Font.Height = -11
+    Font.Color = clWindowText
+    Font.Height = -16
     Font.Name = 'MS Sans Serif'
     Font.Style = []
     Spacing = 0
-    ExplicitWidth = 1072
   end
   object PanelLeft: TPanel
     Left = 0
@@ -273,7 +269,6 @@ object FormGLSViewer: TFormGLSViewer
     Height = 629
     Align = alLeft
     TabOrder = 4
-    ExplicitHeight = 604
     object tvScene: TTreeView
       Left = 1
       Top = 1
@@ -482,7 +477,6 @@ object FormGLSViewer: TFormGLSViewer
         6D0070007500740069006E0067000000410000005E0000005E000000FFFFFFFF
         FFFFFFFF0000000000000000000000000001114300550044004100470065006E
         006500720061007400650064004D00650073006800}
-      ExplicitHeight = 602
     end
   end
   object Scene: TGLScene
@@ -1406,7 +1400,7 @@ object FormGLSViewer: TFormGLSViewer
     Images = ImageListMenu
     Left = 297
     Top = 289
-    StyleName = 'Standard'
+    StyleName = 'Platform Default'
     object acOptimizeMesh: TAction
       Category = 'Processing'
       Caption = 'Optimize Mesh'

+ 70 - 72
Examples/AdvDemos/GLSViewer/Source/fGLSViewer.pas

@@ -77,12 +77,10 @@ uses
   fGLAbout,
   fGLOptions,
   dImages,
-  dDialogs,
-
-  GnuGettext;
+  dDialogs, Vcl.PlatformDefaultStyleActnCtrls;
 
 type
-  TFormGLSViewer = class(TGLForm)
+  TfrmGLSViewer = class(TGLForm)
     StatusBar: TStatusBar;
     Scene: TGLScene;
     ffObject: TGLFreeForm;
@@ -280,7 +278,7 @@ type
   end;
 
 var
-  FormGLSViewer: TFormGLSViewer;
+  frmGLSViewer: TfrmGLSViewer;
   NaviCube: TGLNaviCube;
 
 implementation //-------------------------------------------------------------
@@ -362,7 +360,7 @@ begin
 end;
 
 //---------------------------------------------------------------
-procedure TFormGLSViewer.FormCreate(Sender: TObject);
+procedure TfrmGLSViewer.FormCreate(Sender: TObject);
 begin
   AssetPath := GetCurrentAssetPath();
   TextureDir := AssetPath + '\texture';
@@ -383,7 +381,7 @@ begin
 end;
 
 //---------------------------------------------------------------
-procedure TFormGLSViewer.FormShow(Sender: TObject);
+procedure TfrmGLSViewer.FormShow(Sender: TObject);
 begin
   if not nthShow then
   begin
@@ -401,7 +399,7 @@ begin
 end;
 
 //---------------------------------------------------------------
-procedure TFormGLSViewer.acFileOpenExecute(Sender: TObject);
+procedure TfrmGLSViewer.acFileOpenExecute(Sender: TObject);
 begin
   NaviCube.ActiveMouse := False;
   if dmDialogs.OpenDialog.Execute then
@@ -409,7 +407,7 @@ begin
 end;
 
 //---------------------------------------------------------------
-procedure TFormGLSViewer.acFileOpenTexLibExecute(Sender: TObject);
+procedure TfrmGLSViewer.acFileOpenTexLibExecute(Sender: TObject);
 var
   I: Integer;
 begin
@@ -426,7 +424,7 @@ begin
 end;
 
 //---------------------------------------------------------------
-procedure TFormGLSViewer.acFilePickExecute(Sender: TObject);
+procedure TfrmGLSViewer.acFilePickExecute(Sender: TObject);
 begin
   dmDialogs.ODTextures.InitialDir := AssetPath + '\texture';;
   if dmDialogs.opDialog.Execute then
@@ -445,7 +443,7 @@ begin
 end;
 
 //---------------------------------------------------------------
-procedure TFormGLSViewer.acFileSaveAsExecute(Sender: TObject);
+procedure TfrmGLSViewer.acFileSaveAsExecute(Sender: TObject);
 var
   ext: String;
 begin
@@ -459,19 +457,19 @@ begin
         (dmDialogs.SaveDialog.FilterIndex, False, True));
     if GetVectorFileFormats.FindFromFileName(dmDialogs.SaveDialog.FileName) = nil
     then
-      ShowMessage(_('Unsupported file extension'))
+      ShowMessage('Unsupported file extension')
     else
       ffObject.SaveToFile(dmDialogs.SaveDialog.FileName);
   end;
 end;
 
-procedure TFormGLSViewer.acFileSaveTexturesExecute(Sender: TObject);
+procedure TfrmGLSViewer.acFileSaveTexturesExecute(Sender: TObject);
 begin
   if dmDialogs.SDTextures.Execute then
     dmImages.MaterialLib.SaveToFile(dmDialogs.SDTextures.FileName);
 end;
 
-procedure TFormGLSViewer.snViewerBeforeRender(Sender: TObject);
+procedure TfrmGLSViewer.snViewerBeforeRender(Sender: TObject);
 begin
   THiddenLineShader(hlShader).LinesColor := VectorMake(107 / 256, 123 / 256,
     173 / 256, 1);
@@ -489,13 +487,13 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.snViewerAfterRender(Sender: TObject);
+procedure TfrmGLSViewer.snViewerAfterRender(Sender: TObject);
 begin
   ApplyFSAA;
   Screen.Cursor := crDefault;
 end;
 
-procedure TFormGLSViewer.DoResetCamera;
+procedure TfrmGLSViewer.DoResetCamera;
 var
   objSize: Single;
 begin
@@ -520,7 +518,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.ApplyShadeModeToMaterial(aMaterial: TGLMaterial);
+procedure TfrmGLSViewer.ApplyShadeModeToMaterial(aMaterial: TGLMaterial);
 begin
   if acViewSmoothShading.Checked then
   begin
@@ -554,7 +552,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.ApplyShadeMode;
+procedure TfrmGLSViewer.ApplyShadeMode;
 var
   I: Integer;
 begin
@@ -571,7 +569,7 @@ begin
   ffObject.StructureChanged;
 end;
 
-procedure TFormGLSViewer.ApplyFSAA;
+procedure TfrmGLSViewer.ApplyFSAA;
 begin
   with snViewer.Buffer do
   begin
@@ -592,7 +590,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.ApplyFaceCull;
+procedure TfrmGLSViewer.ApplyFaceCull;
 begin
   with snViewer.Buffer do
   begin
@@ -609,7 +607,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.ApplyBgColor;
+procedure TfrmGLSViewer.ApplyBgColor;
 var
   bmp: TBitmap;
   col: TColor;
@@ -628,7 +626,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.ApplyTexturing;
+procedure TfrmGLSViewer.ApplyTexturing;
 var
   I: Integer;
 begin
@@ -646,12 +644,12 @@ begin
 end;
 
 //--------------------------------------------------------
-procedure TFormGLSViewer.AsyncTimerTimer(Sender: TObject);
+procedure TfrmGLSViewer.AsyncTimerTimer(Sender: TObject);
 begin
   snViewer.ResetPerformanceMonitor;
 end;
 
-procedure TFormGLSViewer.ApplyFPS;
+procedure TfrmGLSViewer.ApplyFPS;
 begin
   if acToolsShowFPS.Checked then
   begin
@@ -666,7 +664,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.SetupFreeFormShading;
+procedure TfrmGLSViewer.SetupFreeFormShading;
 var
   I: Integer;
   LibMat: TGLLibMaterial;
@@ -686,7 +684,7 @@ begin
   ApplyFPS;
 end;
 
-procedure TFormGLSViewer.DoOpen(const FileName: String);
+procedure TfrmGLSViewer.DoOpen(const FileName: String);
 var
   min, max: TAffineVector;
   Name: TFileName;
@@ -694,7 +692,7 @@ begin
   if not FileExists(FileName) then
     Exit;
   Screen.Cursor := crHourGlass;
-  FormGLSViewer.Caption := 'GLSViewer - ' + FileName;
+  frmGLSViewer.Caption := 'GLSViewer - ' + FileName;
   dmImages.MaterialLib.Materials.Clear;
   ffObject.MeshObjects.Clear;
   ffObject.LoadFromFile(FileName);
@@ -716,7 +714,7 @@ begin
   DoResetCamera;
 end;
 
-procedure TFormGLSViewer.snViewerMouseDown(Sender: TObject; Button: TMouseButton;
+procedure TfrmGLSViewer.snViewerMouseDown(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   mx := X;
@@ -724,12 +722,12 @@ begin
   md := True;
 end;
 
-procedure TFormGLSViewer.snViewerMouseLeave(Sender: TObject);
+procedure TfrmGLSViewer.snViewerMouseLeave(Sender: TObject);
 begin
   Cadencer.Enabled := False;
 end;
 
-procedure TFormGLSViewer.snViewerMouseMove(Sender: TObject; Shift: TShiftState;
+procedure TfrmGLSViewer.snViewerMouseMove(Sender: TObject; Shift: TShiftState;
   X, Y: Integer);
 var
   d: Single;
@@ -763,13 +761,13 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.snViewerMouseUp(Sender: TObject; Button: TMouseButton;
+procedure TfrmGLSViewer.snViewerMouseUp(Sender: TObject; Button: TMouseButton;
   Shift: TShiftState; X, Y: Integer);
 begin
   md := False;
 end;
 
-procedure TFormGLSViewer.FormMouseWheel(Sender: TObject; Shift: TShiftState;
+procedure TfrmGLSViewer.FormMouseWheel(Sender: TObject; Shift: TShiftState;
   WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
 begin
   if ffObject.MeshObjects.Count > 0 then
@@ -781,14 +779,14 @@ begin
   Handled := True;
 end;
 
-procedure TFormGLSViewer.MaterialLibTextureNeeded(Sender: TObject;
+procedure TfrmGLSViewer.MaterialLibTextureNeeded(Sender: TObject;
   var textureFileName: String);
 begin
   if not acToolsTexturing.Enabled then
     textureFileName := '';
 end;
 
-procedure TFormGLSViewer.acInvertNormalsExecute(Sender: TObject);
+procedure TfrmGLSViewer.acInvertNormalsExecute(Sender: TObject);
 var
   I: Integer;
 begin
@@ -798,7 +796,7 @@ begin
   ffObject.StructureChanged;
 end;
 
-procedure TFormGLSViewer.acReverseRenderingOrderExecute(Sender: TObject);
+procedure TfrmGLSViewer.acReverseRenderingOrderExecute(Sender: TObject);
 var
   I, j, n: Integer;
   fg: TGLFaceGroup;
@@ -827,17 +825,17 @@ begin
   ffObject.StructureChanged;
 end;
 
-procedure TFormGLSViewer.acRoomExecute(Sender: TObject);
+procedure TfrmGLSViewer.acRoomExecute(Sender: TObject);
 begin
   // Room
 end;
 
-procedure TFormGLSViewer.acSaveAsUpdate(Sender: TObject);
+procedure TfrmGLSViewer.acSaveAsUpdate(Sender: TObject);
 begin
   acFileSaveAs.Enabled := (ffObject.MeshObjects.Count > 0);
 end;
 
-procedure TFormGLSViewer.acHelpAboutExecute(Sender: TObject);
+procedure TfrmGLSViewer.acHelpAboutExecute(Sender: TObject);
 begin
   with TGLAbout.Create(Self) do
     try
@@ -847,32 +845,32 @@ begin
     end;
 end;
 
-procedure TFormGLSViewer.acHelpContentsExecute(Sender: TObject);
+procedure TfrmGLSViewer.acHelpContentsExecute(Sender: TObject);
 begin
   inherited;
   ShellExecute(0, 'open', 'https://en.wikipedia.org/wiki/GLScene', '', '', SW_SHOW);
 end;
 
-procedure TFormGLSViewer.acHelpTopicSearchExecute(Sender: TObject);
+procedure TfrmGLSViewer.acHelpTopicSearchExecute(Sender: TObject);
 begin
   inherited;
   ShellExecute(0, 'open', 'https://glscene.org', '', '', SW_SHOW);
 end;
 
-procedure TFormGLSViewer.acHelpGLSHomePageExecute(Sender: TObject);
+procedure TfrmGLSViewer.acHelpGLSHomePageExecute(Sender: TObject);
 begin
   inherited;
   ShellExecute(0, 'open','https://github.com/glscene', '', '', SW_SHOW);
 end;
 
 
-procedure TFormGLSViewer.acAADefaultExecute(Sender: TObject);
+procedure TfrmGLSViewer.acAADefaultExecute(Sender: TObject);
 begin
   (Sender as TAction).Checked := True;
   ApplyFSAA;
 end;
 
-procedure TFormGLSViewer.acConvertToIndexedTrianglesExecute(Sender: TObject);
+procedure TfrmGLSViewer.acConvertToIndexedTrianglesExecute(Sender: TObject);
 var
   v: TGLAffineVectorList;
   I: TGLIntegerList;
@@ -905,7 +903,7 @@ begin
   SetupFreeFormShading;
 end;
 
-procedure TFormGLSViewer.acStripifyExecute(Sender: TObject);
+procedure TfrmGLSViewer.acStripifyExecute(Sender: TObject);
 var
   I: Integer;
   mo: TGLMeshObject;
@@ -932,7 +930,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.acSaveTreeViewExecute(Sender: TObject);
+procedure TfrmGLSViewer.acSaveTreeViewExecute(Sender: TObject);
 begin
   if dmDialogs.SaveDialog.Execute then
   begin
@@ -940,76 +938,76 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.acSpheresExecute(Sender: TObject);
+procedure TfrmGLSViewer.acSpheresExecute(Sender: TObject);
 begin
   inherited;
   // random spheres
 end;
 
-procedure TFormGLSViewer.acLandscapeExecute(Sender: TObject);
+procedure TfrmGLSViewer.acLandscapeExecute(Sender: TObject);
 begin
   inherited;
   // Hills
 end;
 
-procedure TFormGLSViewer.acLoadTreeViewExecute(Sender: TObject);
+procedure TfrmGLSViewer.acLoadTreeViewExecute(Sender: TObject);
 begin
   inherited;
   //
 end;
 
-procedure TFormGLSViewer.acViewFlatShadingExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewFlatShadingExecute(Sender: TObject);
 begin
   ApplyShadeMode;
 end;
 
-procedure TFormGLSViewer.acViewHiddenLinesExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewHiddenLinesExecute(Sender: TObject);
 begin
   ApplyShadeMode;
 end;
 
-procedure TFormGLSViewer.acViewResetExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewResetExecute(Sender: TObject);
 begin
   DoResetCamera;
 end;
 
-procedure TFormGLSViewer.acViewFlatLinesExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewFlatLinesExecute(Sender: TObject);
 begin
   ApplyShadeMode;
 end;
 
-procedure TFormGLSViewer.acViewSmoothShadingExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewSmoothShadingExecute(Sender: TObject);
 begin
   ApplyShadeMode;
 end;
 
-procedure TFormGLSViewer.acViewWireFrameExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewWireFrameExecute(Sender: TObject);
 begin
   ApplyShadeMode;
 end;
 
-procedure TFormGLSViewer.acViewZoomInExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewZoomInExecute(Sender: TObject);
 var
   h: Boolean;
 begin
   FormMouseWheel(Self, [], -120 * 4, Point(0, 0), h);
 end;
 
-procedure TFormGLSViewer.acViewZoomOutExecute(Sender: TObject);
+procedure TfrmGLSViewer.acViewZoomOutExecute(Sender: TObject);
 var
   h: Boolean;
 begin
   FormMouseWheel(Self, [], 120 * 4, Point(0, 0), h);
 end;
 
-procedure TFormGLSViewer.acOptimizeExecute(Sender: TObject);
+procedure TfrmGLSViewer.acOptimizeExecute(Sender: TObject);
 begin
   OptimizeMesh(ffObject.MeshObjects, [mooVertexCache, mooSortByMaterials]);
   ffObject.StructureChanged;
   SetupFreeFormShading;
 end;
 
-procedure TFormGLSViewer.acToolsOptionsExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsOptionsExecute(Sender: TObject);
 begin
   with TFormOptions.Create(Self) do
     try
@@ -1019,13 +1017,13 @@ begin
     end;
 end;
 
-procedure TFormGLSViewer.acToolsFaceCullingExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsFaceCullingExecute(Sender: TObject);
 begin
   acToolsFaceCulling.Checked := not acToolsFaceCulling.Checked;
   ApplyFaceCull;
 end;
 
-procedure TFormGLSViewer.acToolsInfoExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsInfoExecute(Sender: TObject);
 begin
   with TGLDialog.Create(Self) do
     try
@@ -1039,20 +1037,20 @@ begin
     end;
 end;
 
-procedure TFormGLSViewer.acToolsLightingExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsLightingExecute(Sender: TObject);
 begin
   acToolsLighting.Checked := not acToolsLighting.Checked;
   // TBLighting
   ApplyShadeMode;
 end;
 
-procedure TFormGLSViewer.acToolsShowFPSExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsShowFPSExecute(Sender: TObject);
 begin
   acToolsShowFPS.Checked := not acToolsShowFPS.Checked;
   ApplyFPS;
 end;
 
-procedure TFormGLSViewer.acToolsTexturingExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsTexturingExecute(Sender: TObject);
 begin
   acToolsTexturing.Checked := not acToolsTexturing.Checked;
   if acToolsTexturing.Checked then
@@ -1066,7 +1064,7 @@ begin
     ApplyTexturing;
 end;
 
-procedure TFormGLSViewer.acToolsNaviCubeExecute(Sender: TObject);
+procedure TfrmGLSViewer.acToolsNaviCubeExecute(Sender: TObject);
 begin
   acToolsNaviCube.Checked := not acToolsNaviCube.Checked;
   if acToolsNaviCube.Checked = True then
@@ -1085,7 +1083,7 @@ end;
 //------------------------------------------------------
 // Show Base and Additional Objects
 //------------------------------------------------------
-procedure TFormGLSViewer.acPointsExecute(Sender: TObject);
+procedure TfrmGLSViewer.acPointsExecute(Sender: TObject);
 var
   I: Integer;
   Color: TVector4f;
@@ -1111,12 +1109,12 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.acFileExitExecute(Sender: TObject);
+procedure TfrmGLSViewer.acFileExitExecute(Sender: TObject);
 begin
   Close;
 end;
 
-procedure TFormGLSViewer.CadencerProgress(Sender: TObject;
+procedure TfrmGLSViewer.CadencerProgress(Sender: TObject;
   const deltaTime, newTime: Double);
 begin
   if NaviCube.InactiveTime > 5 then
@@ -1132,14 +1130,14 @@ begin
     snViewer.Invalidate;
 end;
 
-procedure TFormGLSViewer.TimerTimer(Sender: TObject);
+procedure TfrmGLSViewer.TimerTimer(Sender: TObject);
 begin
 //  StatusBar.Panels[3].Text := Format('%.1f  FPS', [snViewer.FramesPerSecond]);
   snViewer.ResetPerformanceMonitor;
 end;
 
 //---------------------------------------------------------------------------
-procedure TFormGLSViewer.tvSceneCheckStateChanged(Sender: TCustomTreeView;
+procedure TfrmGLSViewer.tvSceneCheckStateChanged(Sender: TCustomTreeView;
   Node: TTreeNode; CheckState: TNodeCheckState);
 begin
   inherited;
@@ -1147,7 +1145,7 @@ begin
 end;
 
 //---------------------------------------------------------------------------
-procedure TFormGLSViewer.tvSceneClick(Sender: TObject);
+procedure TfrmGLSViewer.tvSceneClick(Sender: TObject);
 var
   I: Integer;
   pos1, pos2: TGLVector;
@@ -1378,7 +1376,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.ReadIniFile;
+procedure TfrmGLSViewer.ReadIniFile;
 begin
   inherited;
   IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
@@ -1390,7 +1388,7 @@ begin
   end;
 end;
 
-procedure TFormGLSViewer.WriteIniFile;
+procedure TfrmGLSViewer.WriteIniFile;
 begin
   IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0), '.ini'));
   with IniFile do

+ 0 - 28
Examples/AdvDemos/GLSViewer/Source/ggexclude.cfg

@@ -1,28 +0,0 @@
-[exclude-form-class-property]
-TQuery.SQL.Strings
-TAction.ImageName
-TAction.HelpKeyword
-TControl.StyleName
-TControl.HelpKeyword
-
-[exclude-dir]
-
-[exclude-file]
-dImages.*
-fGLForm.*
-dDialogs.*
-
-[exclude-form-class]
-TFontDialog
-TPanel
-TEdit
-TStaticText
-TNumberBox
-TSearchBox
-TToolBar
-TStatusBar
-TControlBar
-
-
-
-

+ 0 - 4433
Examples/AdvDemos/GLSViewer/Source/gnugettext.pas

@@ -1,4433 +0,0 @@
-{*------------------------------------------------------------------------------
-  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: 220 $
-  @see http://dxgettext.po.dk/
--------------------------------------------------------------------------------}
-unit gnugettext;
-(**************************************************************)
-(*                                                            *)
-(*  (C) Copyright by Lars B. Dybdahl and others               *)
-(*  E-mail: [email protected], phone +45 70201241               *)
-(*                                                            *)
-(*  Contributors: Peter Thornqvist, Troy Wolbrink,            *)
-(*                Frank Andreas de Groot, Igor Siticov,       *)
-(*                Jacques Garcia Vazquez, Igor Gitman,        *)
-(*                Arvid Winkelsdorf, Andreas Hausladen,       *)
-(*                Thomas Mueller (dummzeuch)                  *)
-(*                Olivier Sannier (obones)                    *)
-(*                Luebbe Onken (LO)                           *)
-(*                                                            *)
-(*  See http://dxgettext.po.dk/ for more information          *)
-(*                                                            *)
-(**************************************************************)
-
-// $HeadURL: https://svn.code.sf.net/p/dxgettext/code/trunk/dxgettext/sample/gnugettext.pas $
-
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// The names of any contributor may not be used to endorse or promote
-// products derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-interface
-
-// If the conditional define DXGETTEXTDEBUG is defined, debugging log is activated.
-// Use DefaultInstance.DebugLogToFile() to write the log to a file.
-{.$define DXGETTEXTDEBUG}
-
-// If the conditional define dx_ChangeProxyClassname is defined, THookedObjects.Proxify adds '!dx'
-// to the class name. Default: off
-{.$define dx_ChangeProxyClassname}
-
-// If the conditional dx_EMPTY_TO_EMPTY is defined translating an empty string results in an
-// empty string.
-// This can also be set at runtime by setting the EmptyToEmpty field of a TGnuGettextInstance
-// (e.g. the defaultInstance).
-// The default behaviour is to return the header entry as per
-// https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html
-{.$define dx_EMPTY_TO_EMPTY}
-
-// Programs that are compiled with German Delphi will always show the German shortcut
-// keys in menus and hints because the German RTL resourcestrings are not translated.
-// This results in German menu shortcuts 'Strg+<X>', 'Umsch+<X>' to be shown instead of
-// 'Ctrl+<X>', 'Shift+<X>', even if the applications language is not German.
-//
-// This function hooks into Vcl.Menus.ShortCutToText and replaces the German consts with
-// their English counterparts if the current application language is *not* German.
-// Tested with Rad Studio 10.2 Tokyo and 10.3.1 Rio
-{.$define dx_German_Delphi_fix}
-
-// if the conditional define dx_SupportsResources is defined the .mo files
-// can also be added to the executable as Windows resources
-// Be warned: This has not been thoroughly tested.
-// Default is turned off.
-{.$define dx_SupportsResources}
-
-{$ifdef VER140}
-  // Delphi 6
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-{$endif}
-{$ifdef VER150}
-  // Delphi 7
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-{$endif}
-{$ifdef VER160}
-  // Delphi 8
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-{$endif}
-{$ifdef VER170}
-  // Delphi 2005
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-{$endif}
-{$ifdef VER180}
-  {$ifndef VER185}
-  // Delphi 2006
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-  {$DEFINE dx_has_Inline}
-  {$endif}
-{$endif}
-{$ifdef VER185}
-  // Delphi 2007
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-  {$DEFINE dx_has_Inline}
-{$endif}
-// there was no VER190 ??
-{$ifdef VER200}
-  // Delphi 2009, first version with Unicode
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-  {$DEFINE dx_has_Inline}
-  {$DEFINE dx_StringList_has_OwnsObjects}
-  {$DEFINE dx_has_LpVoid}
-  {$DEFINE dx_has_StringBuilder}
-{$endif}
-{$ifdef VER210}
-  // Delphi 2010
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-  {$DEFINE dx_has_Inline}
-  {$DEFINE dx_StringList_has_OwnsObjects}
-  {$DEFINE dx_has_LpVoid}
-  {$DEFINE dx_has_StringBuilder}
-{$endif}
-{$ifdef VER220}
-  // Delphi 2011/XE
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_Hinstance_is_Integer}
-  {$DEFINE dx_NativeInt_is_Integer}
-  {$DEFINE dx_NativeUInt_is_Cardinal}
-  {$DEFINE dx_has_Inline}
-  {$DEFINE dx_has_LpVoid}
-  {$DEFINE dx_StringList_has_OwnsObjects}
-  {$DEFINE dx_has_StringBuilder}
-{$endif}
-{$ifdef VER230}
-  // Delphi 2012/XE2
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_StringList_has_OwnsObjects}
-  {$DEFINE dx_has_Inline}
-  {$DEFINE dx_has_LpVoid}
-  {$DEFINE dx_has_VclThemes}
-  {$DEFINE dx_has_StringBuilder}
-  {$DEFINE dx_has_dotted_unitnames}
-{$endif}
-{$ifdef VER240}
-  // Delphi 2013/XE3
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_StringList_has_OwnsObjects}
-  {$DEFINE dx_GetStrProp_reads_unicode}
-  {$DEFINE dx_has_Inline}
-  {$DEFINE dx_has_LpVoid}
-  {$DEFINE dx_has_VclThemes}
-  {$DEFINE dx_has_StringBuilder}
-  {$DEFINE dx_has_dotted_unitnames}
-{$endif}
-{$if CompilerVersion >= 25}
-  // Delphi XE4 and up
-  {$DEFINE dx_has_Unsafe_Warnings}
-  {$DEFINE dx_has_WideStrings}
-  {$DEFINE dx_StringList_has_OwnsObjects}
-  {$DEFINE dx_GetStrProp_reads_unicode}
-  {$DEFINE dx_has_Inline}
-  {$DEFINE dx_has_LpVoid}
-  {$DEFINE dx_has_VclThemes}
-  {$DEFINE dx_midstr_in_AnsiStrings}
-  {$DEFINE dx_has_StringBuilder}
-  {$DEFINE dx_has_dotted_unitnames}
-{$ifend}
-
-{$ifdef dx_has_Unsafe_Warnings}
-  {$WARN UNSAFE_TYPE OFF}
-  {$WARN UNSAFE_CODE OFF}
-  {$WARN UNSAFE_CAST OFF}
-{$endif dx_has_Unsafe_Warnings}
-
-uses
-{$ifdef MSWINDOWS}
-  Windows,
-{$else}
-  Libc,
-{$ifdef FPC}
-  CWString,
-{$endif}
-{$endif}
-{$IFDEF dx_midstr_in_AnsiStrings}
-  System.AnsiStrings,
-{$ENDIF dx_midstr_in_AnsiStrings}
-{$IFDEF dx_has_WideStrings}
-  WideStrings,
-{$ENDIF dx_has_WideStrings}
-  Types, Classes, StrUtils, SysUtils, TypInfo;
-
-(*****************************************************************************)
-(*                                                                           *)
-(*  MAIN API                                                                 *)
-(*                                                                           *)
-(*****************************************************************************)
-
-type
-  {$IFNDEF UNICODE}
-  UnicodeString=WideString;
-  RawUtf8String=AnsiString;
-  RawByteString=AnsiString;
-  {$ELSE}
-  RawUtf8String=RawByteString;
-  {$ENDIF}
-  DomainString=string;
-  LanguageString=string;
-  ComponentNameString=string;
-  FilenameString=string;
-  MsgIdString=UnicodeString;
-  TranslatedUnicodeString=UnicodeString;
-
-// Main GNU gettext functions. See documentation for instructions on how to use them.
-function _(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-function dgettext_NoExtract(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-function dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-function dngettext(const szDomain: DomainString; const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-function ngettext(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-function ngettext_NoExtract(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-function pgettext(const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-function pdgettext(const szDomain: DomainString; const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-function pngettext(const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-function pdngettext(const szDomain: DomainString; const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-procedure textdomain(const szDomain: DomainString);
-function getcurrenttextdomain: DomainString;
-procedure bindtextdomain(const szDomain: DomainString; const szDirectory: FilenameString);
-
-// Set language to use
-///<summary>
-/// A LocaleName usually has the form ll_CC. Where ll is an ISO 639 two-letter language code,
-/// and CC is an ISO 3166 two-letter country code.
-/// For example, for German in Germany, ll is de, and CC is DE which results in de_DE </summary>
-procedure UseLanguage(LocaleName: LanguageString);
-function GetCurrentLanguage:LanguageString; deprecated; // use GetCurrentLocaleName instead
-///<summary>
-/// @Returns the full locale name in the form ll_CC </summary>
-function GetCurrentLocaleName: LanguageString;
-///<summary>
-/// @Returns the two letter language code of the current LocaleName </summary>
-function GetCurrentLanguageCode: LanguageString;
-///<summary>
-/// @Returns the two letter language code of the given LocaleName </summary>
-function LocaleNameToLanguageCode(const ALocaleName: LanguageString): LanguageString;
-
-// Translates a component (form, frame etc.) to the currently selected language.
-// Put TranslateComponent(self) in the OnCreate event of all your forms.
-// See the manual for documentation on these functions
-type
-  TTranslator=procedure (obj:TObject) of object;
-
-procedure TP_Ignore(AnObject:TObject; const name:ComponentNameString);
-procedure TP_IgnoreClass (IgnClass:TClass);
-procedure TP_IgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString);
-procedure TP_GlobalIgnoreClass (IgnClass:TClass);
-function TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean;
-procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString);
-procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator);
-procedure TP_Remember(AnObject: TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString);
-procedure TranslateComponent(AnObject: TComponent; const TextDomain:DomainString='');
-procedure RetranslateComponent(AnObject: TComponent; const TextDomain:DomainString='');
-
-// Add more domains that resourcestrings can be extracted from. If a translation
-// is not found in the default domain, this domain will be searched, too.
-// This is useful for adding mo files for certain runtime libraries and 3rd
-// party component libraries
-procedure AddDomainForResourceString (const domain:DomainString);
-procedure RemoveDomainForResourceString (const domain:DomainString);
-
-// 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);
-
-// Unicode-enabled way to get resourcestrings, automatically translated
-// Use like this: ws:=LoadResStringW(@NameOfResourceString);
-function LoadResString(ResStringRec: PResStringRec): widestring;
-function LoadResStringW(ResStringRec: PResStringRec): UnicodeString;
-function PLoadResString(const szMsgCtxt: MsgIdString; ResStringRec: PResStringRec): widestring;
-function PLoadResStringW(const szMsgCtxt: MsgIdString; ResStringRec: PResStringRec): UnicodeString;
-
-// This returns an empty string if not translated or translator name is not specified.
-function GetTranslatorNameAndEmail:TranslatedUnicodeString;
-
-
-(*****************************************************************************)
-(*                                                                           *)
-(*  ADVANCED FUNCTIONALITY                                                   *)
-(*                                                                           *)
-(*****************************************************************************)
-
-const
-  DefaultTextDomain = 'default';
-
-var
-  ExecutableFilename: FilenameString; // This is set to paramstr(0) or the name of the DLL you are creating.
-
-const
-  PreferExternal             = False;       // Set to true, to prefer external *.mo over embedded translation
-  UseMemoryMappedFiles       = True;        // Set to False, to use the mo-file as independent copy in memory (you can update the file while it is in use)
-  ReReadMoFileOnSameLanguage = False;       // Set to True, to reread mo-file if the current language is selected again
-
-const
-  // Subversion source code version control version information
-  VCSVersion='$LastChangedRevision: 220 $';
-
-type
-  EGnuGettext=class(Exception);
-  EGGProgrammingError=class(EGnuGettext);
-  EGGComponentError=class(EGnuGettext);
-  EGGIOError=class(EGnuGettext);
-  EGGAnsi2WideConvError=class(EGnuGettext);
-
-// This function will turn resourcestring hooks on or off, eventually with BPL file support.
-// Please do not activate BPL file support when the package is in design mode.
-const AutoCreateHooks=true;
-procedure HookIntoResourceStrings (enabled:boolean=true; SupportPackages:boolean=false);
-
-
-
-
-(*****************************************************************************)
-(*                                                                           *)
-(*  CLASS based implementation.                                              *)
-(*  Use TGnuGettextInstance to have more than one language                   *)
-(*  in your application at the same time                                     *)
-(*                                                                           *)
-(*****************************************************************************)
-
-type
-  TOnDebugLine = Procedure (Sender: TObject; const Line: String; var Discard: Boolean) of Object;  // Set Discard to false if output should still go to ordinary debug log
-  TGetPluralForm=function (Number:Longint):Integer;
-  TDebugLogger=procedure (line: string) of object;
-
-{*------------------------------------------------------------------------------
-  Handles .mo files, in separate files or inside the exe file.
-  Don't use this class. It's for internal use.
--------------------------------------------------------------------------------}
-  TMoFile=
-    class /// Threadsafe. Only constructor and destructor are writing to memory
-    private
-      doswap: boolean;
-    public
-      Users:Integer; /// Reference count. If it reaches zero, this object should be destroyed.
-      constructor Create (const filename: FilenameString;
-                          const Offset: int64; Size: int64;
-                          const xUseMemoryMappedFiles: Boolean;
-                          const ResName: string);
-      destructor Destroy; override;
-      function gettext(const msgid: RawUtf8String;var found:boolean): RawUtf8String; // uses mo file and utf-8
-      property isSwappedArchitecture:boolean read doswap;
-    private
-      N, O, T: Cardinal; /// Values defined at http://www.linuxselfhelp.com/gnu/gettext/html_chapter/gettext_6.html
-      startindex,startstep:integer;
-      FUseMemoryMappedFiles: Boolean;
-      mo: THandle;
-      momapping: THandle;
-      momemoryHandle:PAnsiChar;
-      momemory: PAnsiChar;
-      function autoswap32(i: cardinal): cardinal;
-      function CardinalInMem(baseptr: PAnsiChar; Offset: Cardinal): Cardinal;
-    end;
-
-{*------------------------------------------------------------------------------
-  Handles all issues regarding a specific domain.
-  Don't use this class. It's for internal use.
--------------------------------------------------------------------------------}
-  TDomain=
-    class
-    private
-      Enabled:boolean;
-      vDirectory: FilenameString;
-      procedure setDirectory(const dir: FilenameString);
-    public
-      DebugLogger:TDebugLogger;
-      Domain: DomainString;
-      property Directory: FilenameString read vDirectory write setDirectory;
-      constructor Create;
-      destructor Destroy; override;
-      // Set parameters
-      procedure SetLanguageCode (const langcode:LanguageString);
-      procedure SetFilename (const filename:FilenameString); // Bind this domain to a specific file
-      // Get information
-      procedure GetListOfLanguages(list:TStrings);
-      function GetTranslationProperty(Propertyname: ComponentNameString): TranslatedUnicodeString;
-      function gettext(const msgid: RawUtf8String): RawUtf8String; // uses mo file and utf-8
-    private
-      mofile:TMoFile;
-      SpecificFilename:FilenameString;
-      curlang: LanguageString;
-      OpenHasFailedBefore: boolean;
-      procedure OpenMoFile;
-      procedure CloseMoFile;
-    end;
-
-{*------------------------------------------------------------------------------
-  Helper class for invoking events.
--------------------------------------------------------------------------------}
-  TExecutable=
-    class
-      procedure Execute; virtual; abstract;
-    end;
-
-{*------------------------------------------------------------------------------
-  Interface to implement if you want to register as a language change listener
--------------------------------------------------------------------------------}
-  IGnuGettextInstanceWhenNewLanguageListener = interface
-    procedure WhenNewLanguage (const LanguageID:LanguageString);
-  end;
-
-{*------------------------------------------------------------------------------
-  The main translation engine.
--------------------------------------------------------------------------------}
-  TGnuGettextInstance=
-    class
-    private
-      fOnDebugLine:TOnDebugLine;
-    public
-      Enabled:Boolean;      /// Set this to false to disable translations
-      ///<summary>
-      /// Set this to true, if you want the empty string to be "translated" to an empty string.
-      /// The default behaviour is to return the po file header.
-      /// https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html
-      /// "An empty untranslated-string is reserved to contain the header entry with the meta
-      ///  information (see Header Entry). This header entry should be the first entry of the file.
-      ///  The empty untranslated-string is reserved for this purpose and must not be
-      ///  used anywhere else. </summary>
-      EmptyToEmpty: Boolean;
-      DesignTimeCodePage:Integer;  /// See MultiByteToWideChar() in Win32 API for documentation
-      SearchAllDomains: Boolean;  /// Should gettext and ngettext look in all other known domains after the current one
-
-      ///<summary>
-      /// If LocaleName is not '', the instance will be initialized for the given language / locale </summary>
-      constructor Create(LocaleName: LanguageString = '');
-      destructor Destroy; override;
-      procedure UseLanguage(LocaleName: LanguageString);
-      procedure GetListOfLanguages (const domain:DomainString; list:TStrings); // Puts list of language codes, for which there are translations in the specified domain, into list
-      {$ifndef UNICODE}
-      function gettext(const szMsgId: ansistring): TranslatedUnicodeString; overload; virtual;
-      function ngettext(const singular,plural:ansistring;Number:longint):TranslatedUnicodeString; overload; virtual;
-      {$endif}
-      function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString; overload; virtual;
-      function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString;
-      function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString;
-      function ngettext(const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString; overload; virtual;
-      function ngettext_NoExtract(const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString;
-      function GetCurrentLanguage:LanguageString; deprecated; // use GetCurentLocaleName instead
-      function GetCurrentLanguageCode:LanguageString;
-      function GetCurrentLocaleName:LanguageString;
-      function GetTranslationProperty (const Propertyname:ComponentNameString):TranslatedUnicodeString;
-      function GetTranslatorNameAndEmail:TranslatedUnicodeString;
-
-      // Form translation tools, these are not threadsafe. All TP_ procs must be called just before TranslateProperites()
-      procedure TP_Ignore(AnObject:TObject; const name:ComponentNameString);
-      procedure TP_IgnoreClass (IgnClass:TClass);
-      procedure TP_IgnoreClassProperty (IgnClass:TClass;propertyname:ComponentNameString);
-      function TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean;
-      procedure TP_GlobalIgnoreClass (IgnClass:TClass);
-      procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;propertyname:ComponentNameString);
-      procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator);
-      procedure TP_Remember(AnObject: TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString);
-      procedure TranslateProperties(AnObject: TObject; textdomain:DomainString='');
-      procedure TranslateComponent(AnObject: TComponent; const TextDomain:DomainString='');
-      procedure RetranslateComponent(AnObject: TComponent; const TextDomain:DomainString='');
-
-      // Multi-domain functions
-      {$ifndef UNICODE}
-      function dgettext(const szDomain: DomainString; const szMsgId: ansistring): TranslatedUnicodeString; overload; virtual;
-      function dngettext(const szDomain: DomainString; const singular,plural:ansistring;Number:longint):TranslatedUnicodeString; overload; virtual;
-      {$endif}
-      function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString; overload; virtual;
-      function dgettext_NoExtract(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-      function dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-      function dngettext(const szDomain: DomainString; const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString; overload; virtual;
-      function dngettext_NoExtract(const szDomain: DomainString; const singular,plural:MsgIdString;Number:longint):TranslatedUnicodeString;
-      procedure textdomain(const szDomain: DomainString);
-      function getcurrenttextdomain: DomainString;
-      procedure bindtextdomain(const szDomain: DomainString; const szDirectory: FilenameString);
-      procedure bindtextdomainToFile (const szDomain: DomainString; const filename: FilenameString); // Also works with files embedded in exe file
-
-      // particular translations (context parameter)
-      function pgettext(const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-      function pdgettext(const szDomain: DomainString; const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-      function pngettext(const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-      function pdngettext(const szDomain: DomainString; const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-
-      // Windows API functions
-      function LoadResString(ResStringRec: PResStringRec): UnicodeString;
-      function PLoadResString(const szMsgCtxt: MsgIdString; ResStringRec: PResStringRec): UnicodeString;
-
-      // Output all log info to this file. This may only be called once.
-      procedure DebugLogToFile (const filename:FilenameString; append:boolean=false);
-      procedure DebugLogPause (PauseEnabled:boolean);
-      property  OnDebugLine: TOnDebugLine read fOnDebugLine write fOnDebugLine; // If set, all debug output goes here
-      {$ifndef UNICODE}
-      // Conversion according to design-time character set
-      function ansi2wideDTCP (const s:AnsiString):MsgIdString;  // Convert using Design Time Code Page
-      {$endif}
-
-      procedure RegisterWhenNewLanguageListener(Listener: IGnuGettextInstanceWhenNewLanguageListener);
-      procedure UnregisterWhenNewLanguageListener(Listener: IGnuGettextInstanceWhenNewLanguageListener);
-    protected
-      procedure TranslateStrings (sl:TStrings;const TextDomain:DomainString);
-      {$IFDEF dx_has_WideStrings}
-      procedure TranslateWideStrings (sl: TWideStrings;const TextDomain:DomainString);
-      {$ENDIF dx_has_WideStrings}
-
-      // Override these three, if you want to inherited from this class
-      // to create a new class that handles other domain and language dependent
-      // issues
-      procedure WhenNewLanguage (const LanguageID:LanguageString); virtual;         // Override to know when language changes
-      procedure WhenNewDomain (const TextDomain:DomainString); virtual; // Override to know when text domain changes. Directory is purely informational
-      procedure WhenNewDomainDirectory (const TextDomain:DomainString;const Directory:FilenameString); virtual; // Override to know when any text domain's directory changes. It won't be called if a domain is fixed to a specific file.
-    private
-      curlang: LanguageString;
-      curGetPluralForm:TGetPluralForm;
-      curmsgdomain: DomainString;
-      savefileCS: TMultiReadExclusiveWriteSynchronizer;
-      savefile: TextFile;
-      savememory: TStringList;
-      DefaultDomainDirectory:FilenameString;
-      domainlist: TStringList;     /// List of domain names. Objects are TDomain.
-      TP_IgnoreList:TStringList;   /// Temporary list, reset each time TranslateProperties is called
-      TP_ClassHandling:TList;      /// Items are TClassMode. If a is derived from b, a comes first
-      TP_GlobalClassHandling:TList;      /// Items are TClassMode. If a is derived from b, a comes first
-      TP_Retranslator:TExecutable; /// Cast this to TTP_Retranslator
-      fWhenNewLanguageListeners: TInterfaceList;  /// List of all registered WhenNewLanguage listeners
-      {$ifdef DXGETTEXTDEBUG}
-      DebugLogCS:TMultiReadExclusiveWriteSynchronizer;
-      DebugLog:TStream;
-      DebugLogOutputPaused:Boolean;
-      {$endif}
-      function TP_CreateRetranslator:TExecutable;  // Must be freed by caller!
-      procedure FreeTP_ClassHandlingItems;
-      function ClassIsIgnored(AClass:TClass): Boolean;
-      {$ifdef DXGETTEXTDEBUG}
-      procedure DebugWriteln(Line: string);
-      {$endif}
-      procedure TranslateProperty(AnObject: TObject; PropInfo: PPropInfo;
-        TodoList: TStrings; const TextDomain:DomainString);  // Translates a single property of an object
-      function Getdomain(const domain:DomainString; const DefaultDomainDirectory:FilenameString;
-        const LocaleName: LanguageString): TDomain;
-
-      function GetResString(ResStringRec: PResStringRec): UnicodeString;
-      function ResourceStringGettext(MsgId: MsgIdString): TranslatedUnicodeString;
-      procedure pgettext_fixup(const szLookup,szMsgId: MsgIdString; var szTranslation: MsgIdString); {$ifdef dx_has_Inline}inline;{$endif}
-    end;
-
-const
-  LOCALE_SISO639LANGNAME = $59;    // Used by Lazarus software development tool
-  {$EXTERNALSYM LOCALE_SISO639LANGNAME}
-  LOCALE_SISO3166CTRYNAME = $5A;   // Used by Lazarus software development tool
-  {$EXTERNALSYM LOCALE_SISO3166CTRYNAME}
-  GETTEXT_CONTEXT_GLUE = #4;
-
-var
-  DefaultInstance:TGnuGettextInstance;  /// Default instance of the main API for singlethreaded applications.
-
-implementation
-
-{$IFDEF dx_has_dotted_unitnames}
-{$ifdef dx_has_VclThemes or dx_German_Delphi_fix}
-uses
-{$ifdef dx_has_VclThemes}
-  Vcl.Themes{$ifdef dx_German_Delphi_fix},{$endif}
-{$endif}
-{$ifdef dx_German_Delphi_fix}
-  Vcl.Consts,
-  Vcl.Menus
-{$endif dx_German_Delphi_fix}
-  ;
-{$endif dx_has_VclThemes or dx_German_Delphi_fix}
-{$ELSE ~dx_has_dotted_unitnames}
-{$ifdef dx_German_Delphi_fix}
-uses
-  Consts,
-  Menus;
-{$endif dx_has_VclThemes or dx_German_Delphi_fix}
-{$ENDIF dx_has_dotted_unitnames}
-
-{$ifndef MSWINDOWS}
-{$ifndef LINUX}
-  'This version of gnugettext.pas is only meant to be compiled with Kylix 3,'
-  'Delphi 6, Delphi 7 and later versions. If you use other versions, please'
-  'get the gnugettext.pas version from the Delphi 5 directory.'
-{$endif}
-{$endif}
-
-{$ifdef dx_NativeUInt_is_Cardinal}
-type
-  NativeUInt = cardinal;
-{$endif}
-
-(**************************************************************************)
-// Some comments on the implementation:
-// This unit should be independent of other units where possible.
-// It should have a small footprint in any way.
-(**************************************************************************)
-// TMultiReadExclusiveWriteSynchronizer is used instead of TCriticalSection
-// because it makes this unit independent of the SyncObjs unit
-(**************************************************************************)
-
-{$B-,R+,I+,Q+}
-
-type
-  TTP_RetranslatorItem=
-    class
-      obj:TObject;
-      Propname:ComponentNameString;
-      OldValue:TranslatedUnicodeString;
-    end;
-  TTP_Retranslator=
-    class (TExecutable)
-      TextDomain:DomainString;
-      Instance:TGnuGettextInstance;
-      constructor Create;
-      destructor Destroy; override;
-      procedure Remember (obj:TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString);
-      procedure Execute; override;
-    private
-      list:TList;
-    end;
-  TEmbeddedFileInfo=
-    class
-      offset,size:int64;
-    end;
-{$IFDEF dx_SupportsResources}
-  TResourceFileInfo = class
-  public
-    ResourceName: string;
-    constructor Create(const _ResourceName: string);
-  end;
-{$ENDIF dx_SupportsResources}
-  TFileLocator=
-    class // This class finds files even when embedded inside executable
-      constructor Create;
-      destructor Destroy; override;
-      function FindSignaturePos(const signature: RawByteString; str: TFileStream): Int64;
-      procedure Analyze;  // List files embedded inside executable
-      function FileExists (filename:FilenameString):boolean;
-      function GetMoFile (filename:FilenameString;DebugLogger:TDebugLogger):TMoFile;
-      procedure ReleaseMoFile (mofile:TMoFile);
-    private
-      basedirectory:FilenameString;
-      filelist:TStringList; //Objects are TEmbeddedFileInfo. Filenames are relative to .exe file
-{$IFDEF dx_SupportsResources}
-      FResourceList: TStringList; // Objects are TResourceFileInfo, Filenames are relative to .exe file
-{$ENDIF dx_SupportsResources}
-      MoFilesCS:TMultiReadExclusiveWriteSynchronizer;
-      MoFiles:TStringList; // Objects are filenames+offset, objects are TMoFile
-      function ReadInt64 (str:TStream):int64;
-    end;
-  TGnuGettextComponentMarker=
-    class (TComponent)
-    public
-      LastLanguage:LanguageString;
-      Retranslator:TExecutable;
-      destructor Destroy; override;
-    end;
-  TClassMode=
-    class
-      HClass:TClass;
-      SpecialHandler:TTranslator;
-      PropertiesToIgnore:TStringList; // This is ignored if Handler is set
-      constructor Create;
-      destructor Destroy; override;
-    end;
-  TRStrinfo = record
-    strlength, stroffset: cardinal;
-  end;
-  TStrInfoArr = array[0..10000000] of TRStrinfo;
-  PStrInfoArr = ^TStrInfoArr;
-  TCharArray5=array[0..4] of ansichar;
-  THook=  // Replaces a runtime library procedure with a custom procedure
-    class
-    public
-      constructor Create (OldProcedure, NewProcedure: pointer; FollowJump:boolean=false);
-      destructor Destroy; override;  // Restores unhooked state
-      procedure Reset (FollowJump:boolean=false); // Disables and picks up patch points again
-      procedure Disable;
-      procedure Enable;
-    private
-      oldproc,newproc:Pointer;
-      Patch:TCharArray5;
-      Original:TCharArray5;
-      PatchPosition:PAnsiChar;
-      procedure Shutdown; // Same as destroy, except that object is not destroyed
-    end;
-
-  PProxyClassData = ^TProxyClassData;
-  TProxyClassData = record
-    SelfPtr: TClass;
-    IntfTable: Pointer;
-    AutoTable: Pointer;
-    InitTable: Pointer;
-    TypeInfo: PTypeInfo;
-    FieldTable: Pointer;
-    MethodTable: Pointer;
-    DynamicTable: Pointer;
-    ClassName: PShortString;
-    InstanceSize: Integer;
-    Parent: ^TClass;
-  end;
-
-  THookedObjects=
-    class(TList)
-    private
-      interceptorClassDatas:TList;
-
-      function findInterceptorClassData(aClass:TClass):Pointer;
-
-      procedure BeforeDestructionHook;
-      function GetBeforeDestructionHookAddress: Pointer;
-    public
-      constructor Create;
-      destructor Destroy; override;
-
-      procedure Proxify(obj:TObject);
-      procedure Unproxify(obj:TObject);
-    end;
-
-var
-  // System information
-  Win32PlatformIsUnicode:boolean=False;
-
-  // Information about files embedded inside .exe file
-  FileLocator:TFileLocator;
-
-  // Hooks into runtime library functions
-  ResourceStringDomainListCS:TMultiReadExclusiveWriteSynchronizer;
-  ResourceStringDomainList:TStringList;
-  ComponentDomainListCS:TMultiReadExclusiveWriteSynchronizer;
-  ComponentDomainList:TStringList;
-  HookLoadResString:THook;
-  HookLoadStr:THook;
-  HookFmtLoadStr:THook;
-{$ifdef dx_German_Delphi_fix}
-  HookShortCutToText:THook;
-{$endif dx_German_Delphi_fix}
-  HookedObjects:THookedObjects;
-  KnownRetranslators:TList;
-
-// Helper functions to make the ugly ifdefs more readable
-function doGetWideStrProp(AnObject:TObject; Propname:ComponentNameString):TranslatedUnicodeString;
-begin
-{$IFDEF dx_GetStrProp_reads_unicode}
-  Result := GetStrProp(AnObject, PropName);
-{$ELSE}
-  Result := GetWideStrProp(AnObject, PropName)
-{$ENDIF}
-end;
-
-{$IFDEF UNICODE}
-function doGetUnicodeStrProp(AnObject:TObject; Propname:ComponentNameString):TranslatedUnicodeString;
-begin
-{$IFDEF dx_GetStrProp_reads_unicode}
-  Result := GetStrProp(AnObject, PropName);
-{$ELSE}
-  Result := GetUnicodeStrProp(AnObject, PropName)
-{$ENDIF}
-end;
-{$ENDIF UNICODE}
-
-function GGGetEnvironmentVariable(const Name:widestring):widestring;
-var
-  Len: integer;
-  W : WideString;
-begin
-  Result := '';
-  SetLength(W,1);
-  Len := Windows.GetEnvironmentVariableW(PWideChar(Name), PWideChar(W), 1);
-  if Len > 0 then begin
-    SetLength(Result, Len - 1);
-    Windows.GetEnvironmentVariableW(PWideChar(Name), PWideChar(Result), Len);
-  end;
-end;
-
-function StripCRRawMsgId (s:RawUtf8String):RawUtf8String;
-var
-  i:integer;
-begin
-  i:=1;
-  while i<=length(s) do begin
-    if s[i]=#13 then delete (s,i,1) else inc (i);
-  end;
-  Result:=s;
-end;
-
-{$ifdef dx_midstr_in_AnsiStrings}
-function MidStr(const AText: RawUtf8String; const AStart, ACount: Integer): RawUtf8String; overload; inline;
-begin
-  Result := System.AnsiStrings.MidStr(AText, AStart, ACount);
-end;
-{$endif dx_midstr_in_AnsiStrings}
-
-function EnsureLineBreakInTranslatedString (s:RawUtf8String):RawUtf8String;
-{$ifdef MSWINDOWS}
-var
-  i:integer;
-{$endif}
-begin
-  {$ifdef MSWINDOWS}
-  Assert (sLinebreak=ansistring(#13#10));
-  i:=1;
-  while i<=length(s) do begin
-    if (s[i]=#10) and (MidStr(s,i-1,1)<>#13) then begin
-      insert (#13,s,i);
-      inc (i,2);
-    end else
-      inc (i);
-  end;
-  {$endif}
-  Result:=s;
-end;
-
-function IsWriteProp(Info: PPropInfo): Boolean;
-begin
-  Result := Assigned(Info) and (Info^.SetProc <> nil);
-end;
-
-function ResourceStringGettext(MsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result := DefaultInstance.ResourceStringGettext(MsgId);
-end;
-
-function ComponentGettext(MsgId: MsgIdString; Instance: TGnuGettextInstance = nil): TranslatedUnicodeString;
-var
-  i:integer;
-begin
-  if (MsgID='') or (ComponentDomainListCS=nil) then begin
-    // This only happens during very complicated program startups that fail,
-    // or when Msgid=''
-    Result:=MsgId;
-    exit;
-  end;
-
-  // First, get the value from the default domain
-  if Assigned(Instance) then
-    Result:=Instance.dgettext(Instance.curmsgdomain, MsgId)
-  else
-    Result:=dgettext(DefaultInstance.curmsgdomain, MsgId);
-  if Result<>MsgId then
-    exit;
-
-  // If it was not in the default domain, then go through the others
-  ComponentDomainListCS.BeginRead;
-  try
-    for i:=0 to ComponentDomainList.Count-1 do begin
-      if Assigned(Instance) then
-        Result:=Instance.dgettext(ComponentDomainList.Strings[i], MsgId)
-      else
-        Result:=dgettext(ComponentDomainList.Strings[i], MsgId);
-      if Result<>MsgId then
-        break;
-    end;
-  finally
-    ComponentDomainListCS.EndRead;
-  end;
-end;
-
-function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result := DefaultInstance.gettext(szMsgId);
-end;
-
-function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result := gettext(szMsgId);
-end;
-
-function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  //*** With this function Strings can be added to the po-file without beeing
-  //    ResourceStrings (dxgettext will add the string and this function will
-  //    return it without a change)
-  //    see gettext manual
-  //      4.7 - Special Cases of Translatable Strings
-  //      http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases
-  Result := DefaultInstance.gettext_NoOp(szMsgId);
-end;
-
-{*------------------------------------------------------------------------------
-  This is the main translation procedure used in programs. It takes a parameter,
-  looks it up in the translation dictionary, and returns the translation.
-  If no translation is found, the parameter is returned.
-
-  @param szMsgId The text, that should be displayed if no translation is found.
--------------------------------------------------------------------------------}
-function _(const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.gettext(szMsgId);
-end;
-
-{*------------------------------------------------------------------------------
-  Translates a text, using a specified translation domain.
-  If no translation is found, the parameter is returned.
-
-  @param szDomain Which translation domain that should be searched for a translation.
-  @param szMsgId The text, that should be displayed if no translation is found.
--------------------------------------------------------------------------------}
-function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.dgettext(szDomain, szMsgId);
-end;
-
-function dgettext_NoExtract(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result := dgettext(szDomain, szMsgId);
-end;
-
-function dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  //*** With this function Strings can be added to the po-file without being
-  //    ResourceStrings (dxgettext will add the string and this function will
-  //    return it without a change)
-  //    see gettext manual
-  //      4.7 - Special Cases of Translatable Strings
-  //      http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases
-  Result := DefaultInstance.dgettext_NoOp(szDomain, szMsgId);
-end;
-
-function dngettext(const szDomain: DomainString; const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.dngettext(szDomain,singular,plural,Number);
-end;
-
-function ngettext(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.ngettext(singular,plural,Number);
-end;
-
-function ngettext_NoExtract(const singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result := ngettext(singular, plural, Number);
-end;
-
-function pgettext(const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.pgettext(szMsgCtxt,szMsgId);
-end;
-
-function pdgettext(const szDomain: DomainString; const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.pdgettext(szDomain,szMsgCtxt,szMsgId);
-end;
-
-function pngettext(const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.pngettext(szMsgCtxt,singular,plural,Number);
-end;
-
-function pdngettext(const szDomain: DomainString; const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.pdngettext(szDomain,szMsgCtxt,singular,plural,Number);
-end;
-
-procedure textdomain(const szDomain: Domainstring);
-begin
-  DefaultInstance.textdomain(szDomain);
-end;
-
-procedure SetGettextEnabled (enabled:boolean);
-begin
-  DefaultInstance.Enabled:=enabled;
-end;
-
-function getcurrenttextdomain: DomainString;
-begin
-  Result:=DefaultInstance.getcurrenttextdomain;
-end;
-
-procedure bindtextdomain(const szDomain: DomainString; const szDirectory: FilenameString);
-begin
-  DefaultInstance.bindtextdomain(szDomain, szDirectory);
-end;
-
-procedure TP_Ignore(AnObject:TObject; const name:FilenameString);
-begin
-  DefaultInstance.TP_Ignore(AnObject, name);
-end;
-
-procedure TP_GlobalIgnoreClass (IgnClass:TClass);
-begin
-  DefaultInstance.TP_GlobalIgnoreClass(IgnClass);
-end;
-
-function TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean;
-begin
-  Result := DefaultInstance.TP_TryGlobalIgnoreClass (IgnClass);
-end;
-
-procedure TP_IgnoreClass (IgnClass:TClass);
-begin
-  DefaultInstance.TP_IgnoreClass(IgnClass);
-end;
-
-procedure TP_IgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString);
-begin
-  DefaultInstance.TP_IgnoreClassProperty(IgnClass,propertyname);
-end;
-
-procedure TP_GlobalIgnoreClassProperty (IgnClass:TClass;const propertyname:ComponentNameString);
-begin
-  DefaultInstance.TP_GlobalIgnoreClassProperty(IgnClass,propertyname);
-end;
-
-procedure TP_GlobalHandleClass (HClass:TClass;Handler:TTranslator);
-begin
-  DefaultInstance.TP_GlobalHandleClass (HClass, Handler);
-end;
-
-procedure TP_Remember(AnObject: TObject; PropName:ComponentNameString; OldValue:TranslatedUnicodeString);
-begin
-  DefaultInstance.TP_Remember(AnObject, PropName, OldValue);
-end;
-
-procedure TranslateComponent(AnObject: TComponent; const TextDomain:DomainString='');
-begin
-  DefaultInstance.TranslateComponent(AnObject, TextDomain);
-end;
-
-procedure RetranslateComponent(AnObject: TComponent; const TextDomain:DomainString='');
-begin
-  DefaultInstance.RetranslateComponent(AnObject, TextDomain);
-end;
-
-{$ifdef MSWINDOWS}
-
-// These constants are only used in Windows 95
-// Thanks to Frank Andreas de Groot for this table
-const
-  IDAfrikaans                 = $0436;  IDAlbanian                  = $041C;
-  IDArabicAlgeria             = $1401;  IDArabicBahrain             = $3C01;
-  IDArabicEgypt               = $0C01;  IDArabicIraq                = $0801;
-  IDArabicJordan              = $2C01;  IDArabicKuwait              = $3401;
-  IDArabicLebanon             = $3001;  IDArabicLibya               = $1001;
-  IDArabicMorocco             = $1801;  IDArabicOman                = $2001;
-  IDArabicQatar               = $4001;  IDArabic                    = $0401;
-  IDArabicSyria               = $2801;  IDArabicTunisia             = $1C01;
-  IDArabicUAE                 = $3801;  IDArabicYemen               = $2401;
-  IDArmenian                  = $042B;  IDAssamese                  = $044D;
-  IDAzeriCyrillic             = $082C;  IDAzeriLatin                = $042C;
-  IDBasque                    = $042D;  IDByelorussian              = $0423;
-  IDBengali                   = $0445;  IDBulgarian                 = $0402;
-  IDBurmese                   = $0455;  IDCatalan                   = $0403;
-  IDChineseHongKong           = $0C04;  IDChineseMacao              = $1404;
-  IDSimplifiedChinese         = $0804;  IDChineseSingapore          = $1004;
-  IDTraditionalChinese        = $0404;  IDCroatian                  = $041A;
-  IDCzech                     = $0405;  IDDanish                    = $0406;
-  IDBelgianDutch              = $0813;  IDDutch                     = $0413;
-  IDEnglishAUS                = $0C09;  IDEnglishBelize             = $2809;
-  IDEnglishCanadian           = $1009;  IDEnglishCaribbean          = $2409;
-  IDEnglishIreland            = $1809;  IDEnglishJamaica            = $2009;
-  IDEnglishNewZealand         = $1409;  IDEnglishPhilippines        = $3409;
-  IDEnglishSouthAfrica        = $1C09;  IDEnglishTrinidad           = $2C09;
-  IDEnglishUK                 = $0809;  IDEnglishUS                 = $0409;
-  IDEnglishZimbabwe           = $3009;  IDEstonian                  = $0425;
-  IDFaeroese                  = $0438;  IDFarsi                     = $0429;
-  IDFinnish                   = $040B;  IDBelgianFrench             = $080C;
-  IDFrenchCameroon            = $2C0C;  IDFrenchCanadian            = $0C0C;
-  IDFrenchCotedIvoire         = $300C;  IDFrench                    = $040C;
-  IDFrenchLuxembourg          = $140C;  IDFrenchMali                = $340C;
-  IDFrenchMonaco              = $180C;  IDFrenchReunion             = $200C;
-  IDFrenchSenegal             = $280C;  IDSwissFrench               = $100C;
-  IDFrenchWestIndies          = $1C0C;  IDFrenchZaire               = $240C;
-  IDFrisianNetherlands        = $0462;  IDGaelicIreland             = $083C;
-  IDGaelicScotland            = $043C;  IDGalician                  = $0456;
-  IDGeorgian                  = $0437;  IDGermanAustria             = $0C07;
-  IDGerman                    = $0407;  IDGermanLiechtenstein       = $1407;
-  IDGermanLuxembourg          = $1007;  IDSwissGerman               = $0807;
-  IDGreek                     = $0408;  IDGujarati                  = $0447;
-  IDHebrew                    = $040D;  IDHindi                     = $0439;
-  IDHungarian                 = $040E;  IDIcelandic                 = $040F;
-  IDIndonesian                = $0421;  IDItalian                   = $0410;
-  IDSwissItalian              = $0810;  IDJapanese                  = $0411;
-  IDKannada                   = $044B;  IDKashmiri                  = $0460;
-  IDKazakh                    = $043F;  IDKhmer                     = $0453;
-  IDKirghiz                   = $0440;  IDKonkani                   = $0457;
-  IDKorean                    = $0412;  IDLao                       = $0454;
-  IDLatvian                   = $0426;  IDLithuanian                = $0427;
-  IDMacedonian                = $042F;  IDMalaysian                 = $043E;
-  IDMalayBruneiDarussalam     = $083E;  IDMalayalam                 = $044C;
-  IDMaltese                   = $043A;  IDManipuri                  = $0458;
-  IDMarathi                   = $044E;  IDMongolian                 = $0450;
-  IDNepali                    = $0461;  IDNorwegianBokmol           = $0414;
-  IDNorwegianNynorsk          = $0814;  IDOriya                     = $0448;
-  IDPolish                    = $0415;  IDBrazilianPortuguese       = $0416;
-  IDPortuguese                = $0816;  IDPunjabi                   = $0446;
-  IDRhaetoRomanic             = $0417;  IDRomanianMoldova           = $0818;
-  IDRomanian                  = $0418;  IDRussianMoldova            = $0819;
-  IDRussian                   = $0419;  IDSamiLappish               = $043B;
-  IDSanskrit                  = $044F;  IDSerbianCyrillic           = $0C1A;
-  IDSerbianLatin              = $081A;  IDSesotho                   = $0430;
-  IDSindhi                    = $0459;  IDSlovak                    = $041B;
-  IDSlovenian                 = $0424;  IDSorbian                   = $042E;
-  IDSpanishArgentina          = $2C0A;  IDSpanishBolivia            = $400A;
-  IDSpanishChile              = $340A;  IDSpanishColombia           = $240A;
-  IDSpanishCostaRica          = $140A;  IDSpanishDominicanRepublic  = $1C0A;
-  IDSpanishEcuador            = $300A;  IDSpanishElSalvador         = $440A;
-  IDSpanishGuatemala          = $100A;  IDSpanishHonduras           = $480A;
-  IDMexicanSpanish            = $080A;  IDSpanishNicaragua          = $4C0A;
-  IDSpanishPanama             = $180A;  IDSpanishParaguay           = $3C0A;
-  IDSpanishPeru               = $280A;  IDSpanishPuertoRico         = $500A;
-  IDSpanishModernSort         = $0C0A;  IDSpanish                   = $040A;
-  IDSpanishUruguay            = $380A;  IDSpanishVenezuela          = $200A;
-  IDSutu                      = $0430;  IDSwahili                   = $0441;
-  IDSwedishFinland            = $081D;  IDSwedish                   = $041D;
-  IDTajik                     = $0428;  IDTamil                     = $0449;
-  IDTatar                     = $0444;  IDTelugu                    = $044A;
-  IDThai                      = $041E;  IDTibetan                   = $0451;
-  IDTsonga                    = $0431;  IDTswana                    = $0432;
-  IDTurkish                   = $041F;  IDTurkmen                   = $0442;
-  IDUkrainian                 = $0422;  IDUrdu                      = $0420;
-  IDUzbekCyrillic             = $0843;  IDUzbekLatin                = $0443;
-  IDVenda                     = $0433;  IDVietnamese                = $042A;
-  IDWelsh                     = $0452;  IDXhosa                     = $0434;
-  IDZulu                      = $0435;
-
-function GetWindowsLanguage: WideString;
-var
-  langid: Cardinal;
-  langcode: WideString;
-  CountryName: array[0..4] of widechar;
-  LanguageName: array[0..4] of widechar;
-  works: boolean;
-begin
-  // The return value of GetLocaleInfo is compared with 3 = 2 characters and a zero
-  works := 3 = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SISO639LANGNAME, LanguageName, SizeOf(LanguageName));
-  works := works and (3 = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME, CountryName, SizeOf(CountryName)));
-  if works then begin
-    // Windows 98, Me, NT4, 2000, XP and newer
-    LangCode := PWideChar(@(LanguageName[0]));
-    if lowercase(LangCode)='no' then LangCode:='nb';
-    LangCode:=LangCode + '_' + PWideChar(@CountryName[0]);
-  end else begin
-    // This part should only happen on Windows 95.
-    langid := GetThreadLocale;
-    case langid of
-      IDBelgianDutch: langcode := 'nl_BE';
-      IDBelgianFrench: langcode := 'fr_BE';
-      IDBrazilianPortuguese: langcode := 'pt_BR';
-      IDDanish: langcode := 'da_DK';
-      IDDutch: langcode := 'nl_NL';
-      IDEnglishUK: langcode := 'en_GB';
-      IDEnglishUS: langcode := 'en_US';
-      IDFinnish: langcode := 'fi_FI';
-      IDFrench: langcode := 'fr_FR';
-      IDFrenchCanadian: langcode := 'fr_CA';
-      IDGerman: langcode := 'de_DE';
-      IDGermanLuxembourg: langcode := 'de_LU';
-      IDGreek: langcode := 'el_GR';
-      IDIcelandic: langcode := 'is_IS';
-      IDItalian: langcode := 'it_IT';
-      IDKorean: langcode := 'ko_KO';
-      IDNorwegianBokmol: langcode := 'nb_NO';
-      IDNorwegianNynorsk: langcode := 'nn_NO';
-      IDPolish: langcode := 'pl_PL';
-      IDPortuguese: langcode := 'pt_PT';
-      IDRussian: langcode := 'ru_RU';
-      IDSpanish, IDSpanishModernSort: langcode := 'es_ES';
-      IDSwedish: langcode := 'sv_SE';
-      IDSwedishFinland: langcode := 'sv_FI';
-    else
-      langcode := 'C';
-    end;
-  end;
-  Result := langcode;
-end;
-{$endif}
-
-{$ifndef UNICODE}
-function LoadResStringA(ResStringRec: PResStringRec): ansistring;
-begin
-  Result:=DefaultInstance.LoadResString(ResStringRec);
-end;
-{$endif}
-
-function GetTranslatorNameAndEmail:TranslatedUnicodeString;
-begin
-  Result:=DefaultInstance.GetTranslatorNameAndEmail;
-end;
-
-procedure UseLanguage(LocaleName: LanguageString);
-begin
-  DefaultInstance.UseLanguage(LocaleName);
-end;
-
-type
-{$ifdef dx_Hinstance_is_Integer}
-  THInstanceType = Integer;
-{$else dx_Hinstance_is_Integer}
-  THInstanceType = NativeInt;
-{$endif dx_Hinstance_is_Integer}
-
-{$ifdef dx_NativeInt_is_Integer}
-  TNativeInt = Integer;
-{$else dx_NativeInt_is_Integer}
-  TNativeInt = NativeInt;
-{$endif dx_NativeInt_is_Integer}
-
-type
-  PStrData = ^TStrData;
-  TStrData = record
-    Ident: TNativeInt;
-    Str: String;
-  end;
-
-function SysUtilsEnumStringModules(Instance: THInstanceType; Data: Pointer): Boolean;
-{$IFDEF MSWINDOWS}
-var
-  Buffer: array [0..1023] of Char; // WideChar in Delphi 2009, AnsiChar before that
-begin
-  with PStrData(Data)^ do begin
-    SetString(Str, Buffer,
-      LoadString(Instance, Ident, @Buffer[0], Length(Buffer)));
-    Result := Str = '';
-  end;
-end;
-{$ENDIF}
-{$IFDEF LINUX}
-var
-  rs:TResStringRec;
-  Module:HModule;
-begin
-  Module:=Instance;
-  rs.Module:=@Module;
-  with PStrData(Data)^ do begin
-    rs.Identifier:=Ident;
-    Str:=System.LoadResString(@rs);
-    Result:=Str='';
-  end;
-end;
-{$ENDIF}
-
-function SysUtilsFindStringResource(Ident: TNativeInt): string;
-var
-  StrData: TStrData;
-begin
-  StrData.Ident := Ident;
-  StrData.Str := '';
-  EnumResourceModules(SysUtilsEnumStringModules, @StrData);
-  Result := StrData.Str;
-end;
-
-function SysUtilsLoadStr(Ident: Integer): string;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DefaultInstance.DebugWriteln ('Sysutils.LoadRes('+IntToStr(ident)+') called');
-  {$endif}
-  Result := ResourceStringGettext(SysUtilsFindStringResource(Ident));
-end;
-
-function SysUtilsFmtLoadStr(Ident: Integer; const Args: array of const): string;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DefaultInstance.DebugWriteln ('Sysutils.FmtLoadRes('+IntToStr(ident)+',Args) called');
-  {$endif}
-  FmtStr(Result, ResourceStringGettext(SysUtilsFindStringResource(Ident)),Args);
-end;
-
-function LoadResString(ResStringRec: PResStringRec): widestring;
-begin
-  Result:=DefaultInstance.LoadResString(ResStringRec);
-end;
-
-function LoadResStringW(ResStringRec: PResStringRec): UnicodeString;
-begin
-  Result:=DefaultInstance.LoadResString(ResStringRec);
-end;
-
-function PLoadResString(const szMsgCtxt: MsgIdString; ResStringRec: PResStringRec): widestring;
-begin
-  Result:=DefaultInstance.PLoadResString(szMsgCtxt,ResStringRec);
-end;
-
-function PLoadResStringW(const szMsgCtxt: MsgIdString; ResStringRec: PResStringRec): UnicodeString;
-begin
-  Result:=DefaultInstance.PLoadResString(szMsgCtxt,ResStringRec);
-end;
-
-function GetCurrentLanguage:LanguageString;
-begin
-  Result:=GetCurrentLocaleName;
-end;
-
-function GetCurrentLocaleName: LanguageString;
-begin
-  Result:=DefaultInstance.GetCurrentLocaleName;
-end;
-
-function GetCurrentLanguageCode: LanguageString;
-begin
-  Result := LocaleNameToLanguageCode(GetCurrentLocaleName);
-end;
-
-function LocaleNameToLanguageCode(const ALocaleName: LanguageString): LanguageString;
-begin
-  Result := LowerCase(LeftStr(ALocaleName, 2));
-end;
-
-{ TDomain }
-
-procedure TDomain.CloseMoFile;
-begin
-  if mofile<>nil then begin
-    FileLocator.ReleaseMoFile(mofile);
-    mofile:=nil;
-  end;
-  OpenHasFailedBefore:=False;
-end;
-
-destructor TDomain.Destroy;
-begin
-  CloseMoFile;
-  inherited;
-end;
-
-{$ifdef mswindows}
-function GetLastWinError:widestring;
-var
-  errcode:Cardinal;
-begin
-  SetLength (Result,2000);
-  errcode:=GetLastError();
-  Windows.FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM,nil,errcode,0,PWideChar(Result),2000,nil);
-  Result:=PWideChar(Result);
-end;
-{$endif}
-
-procedure TDomain.OpenMoFile;
-var
-  filename: FilenameString;
-begin
-  // Check if it is already open
-  if mofile<>nil then
-    exit;
-
-  // Check if it has been attempted to open the file before
-  if OpenHasFailedBefore then
-    exit;
-
-  if SpecificFilename<>'' then begin
-    filename:=SpecificFilename;
-    {$ifdef DXGETTEXTDEBUG}
-    DebugLogger ('Domain '+domain+' is bound to specific file '+filename);
-    {$endif}
-  end else begin
-    filename := Directory + curlang + PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo';
-    if (not FileLocator.FileExists(filename)) and (not fileexists(filename)) then begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugLogger ('Domain '+domain+': File does not exist, neither embedded or in file system: '+filename);
-      {$endif}
-      filename := Directory + MidStr(curlang, 1, 2) + PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo';
-      {$ifdef DXGETTEXTDEBUG}
-      DebugLogger ('Domain '+domain+' will attempt to use this file: '+filename);
-      {$endif}
-    end else begin
-      {$ifdef DXGETTEXTDEBUG}
-      if FileLocator.FileExists(filename) then
-        DebugLogger ('Domain '+domain+' will attempt to use this embedded file: '+filename)
-      else
-        DebugLogger ('Domain '+domain+' will attempt to use this file that was found on the file system: '+filename);
-      {$endif}
-    end;
-  end;
-  if (not FileLocator.FileExists(filename)) and (not fileexists(filename)) then begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugLogger ('Domain '+domain+' failed to locate the file: '+filename);
-    {$endif}
-    OpenHasFailedBefore:=True;
-    exit;
-  end;
-  {$ifdef DXGETTEXTDEBUG}
-  DebugLogger ('Domain '+domain+' now accesses the file.');
-  {$endif}
-  mofile:=FileLocator.GetMoFile(filename, DebugLogger);
-
-  {$ifdef DXGETTEXTDEBUG}
-  if mofile.isSwappedArchitecture then
-    DebugLogger ('.mo file is swapped (comes from another CPU architecture)');
-  {$endif}
-
-  // Check, that the contents of the file is utf-8
-  if pos('CHARSET=UTF-8',uppercase(GetTranslationProperty('Content-Type')))=0 then begin
-    CloseMoFile;
-    {$ifdef DXGETTEXTDEBUG}
-    DebugLogger ('The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.');
-    {$endif}
-    {$ifdef MSWINDOWS}
-    MessageBoxW(0,PWideChar(widestring('The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.')),'Localization problem',MB_OK);
-    {$else}
-    writeln (stderr,'The translation for the language code '+curlang+' (in '+filename+') does not have charset=utf-8 in its Content-Type. Translations are turned off.');
-    {$endif}
-    Enabled:=False;
-  end;
-end;
-
-{$IFDEF UNICODE}
-function utf8decode (s:RawByteString):UnicodeString; {$ifdef dx_has_Inline}inline;{$endif}
-begin
-  Result:=UTF8ToUnicodeString(s);
-end;
-{$endif}
-
-function TDomain.GetTranslationProperty(
-  Propertyname: ComponentNameString): TranslatedUnicodeString;
-var
-  sl:TStringList;
-  i:integer;
-  s:string;
-begin
-  Propertyname:=uppercase(Propertyname)+': ';
-  sl:=TStringList.Create;
-  try
-    sl.Text:=utf8decode(gettext(''));
-    for i:=0 to sl.Count-1 do begin
-      s:=sl.Strings[i];
-      if uppercase(MidStr(s,1,length(Propertyname)))=Propertyname then begin
-        Result:=trim(MidStr(s,length(PropertyName)+1,maxint));
-
-        {$ifdef DXGETTEXTDEBUG}
-        DebugLogger ('GetTranslationProperty('+PropertyName+') returns '''+Result+'''.');
-        {$endif}
-        exit;
-      end;
-    end;
-  finally
-    FreeAndNil (sl);
-  end;
-  Result:='';
-  {$ifdef DXGETTEXTDEBUG}
-  DebugLogger ('GetTranslationProperty('+PropertyName+') did not find any value. An empty string is returned.');
-  {$endif}
-end;
-
-procedure TDomain.setDirectory(const dir: FilenameString);
-begin
-  vDirectory := IncludeTrailingPathDelimiter(dir);
-  SpecificFilename:='';
-  CloseMoFile;
-end;
-
-procedure AddDomainForResourceString (const domain:DomainString);
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DefaultInstance.DebugWriteln ('Extra domain for resourcestring: '+domain);
-  {$endif}
-  ResourceStringDomainListCS.BeginWrite;
-  try
-    if ResourceStringDomainList.IndexOf(domain)=-1 then
-      ResourceStringDomainList.Add (domain);
-  finally
-    ResourceStringDomainListCS.EndWrite;
-  end;
-end;
-
-procedure RemoveDomainForResourceString (const domain:DomainString);
-var
-  i:integer;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DefaultInstance.DebugWriteln ('Remove domain for resourcestring: '+domain);
-  {$endif}
-  ResourceStringDomainListCS.BeginWrite;
-  try
-    i:=ResourceStringDomainList.IndexOf(domain);
-    if i<>-1 then
-      ResourceStringDomainList.Delete (i);
-  finally
-    ResourceStringDomainListCS.EndWrite;
-  end;
-end;
-
-procedure AddDomainForComponent (const domain:DomainString);
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DefaultInstance.DebugWriteln ('Extra domain for component: '+domain);
-  {$endif}
-  ComponentDomainListCS.BeginWrite;
-  try
-    if ComponentDomainList.IndexOf(domain)=-1 then
-      ComponentDomainList.Add (domain);
-  finally
-    ComponentDomainListCS.EndWrite;
-  end;
-end;
-
-procedure RemoveDomainForComponent (const domain:DomainString);
-var
-  i:integer;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DefaultInstance.DebugWriteln ('Remove domain for component: '+domain);
-  {$endif}
-  ComponentDomainListCS.BeginWrite;
-  try
-    i:=ComponentDomainList.IndexOf(domain);
-    if i<>-1 then
-      ComponentDomainList.Delete (i);
-  finally
-    ComponentDomainListCS.EndWrite;
-  end;
-end;
-
-procedure TDomain.SetLanguageCode(const langcode: LanguageString);
-begin
-  CloseMoFile;
-  curlang:=langcode;
-end;
-
-function GetPluralForm2EN(Number: Integer): Integer;
-begin
-  Number:=abs(Number);
-  if Number=1 then Result:=0 else Result:=1;
-end;
-
-function GetPluralForm1(Number: Integer): Integer;
-begin
-  Result:=0;
-end;
-
-function GetPluralForm2FR(Number: Integer): Integer;
-begin
-  Number:=abs(Number);
-  if (Number=1) or (Number=0) then Result:=0 else Result:=1;
-end;
-
-function GetPluralForm3LV(Number: Integer): Integer;
-begin
-  Number:=abs(Number);
-  if (Number mod 10=1) and (Number mod 100<>11) then
-    Result:=0
-  else
-    if Number<>0 then Result:=1
-                 else Result:=2;
-end;
-
-function GetPluralForm3GA(Number: Integer): Integer;
-begin
-  Number:=abs(Number);
-  if Number=1 then Result:=0
-  else if Number=2 then Result:=1
-  else Result:=2;
-end;
-
-function GetPluralForm3LT(Number: Integer): Integer;
-var
-  n1,n2:byte;
-begin
-  Number:=abs(Number);
-  n1:=Number mod 10;
-  n2:=Number mod 100;
-  if (n1=1) and (n2<>11) then
-    Result:=0
-  else
-    if (n1>=2) and ((n2<10) or (n2>=20)) then Result:=1
-    else Result:=2;
-end;
-
-function GetPluralForm3PL(Number: Integer): Integer;
-var
-  n1,n2:byte;
-begin
-  Number:=abs(Number);
-  n1:=Number mod 10;
-  n2:=Number mod 100;
-
-  if Number=1 then Result:=0
-  else if (n1>=2) and (n1<=4) and ((n2<10) or (n2>=20)) then Result:=1
-  else Result:=2;
-end;
-
-function GetPluralForm3RU(Number: Integer): Integer;
-var
-  n1,n2:byte;
-begin
-  Number:=abs(Number);
-  n1:=Number mod 10;
-  n2:=Number mod 100;
-  if (n1=1) and (n2<>11) then
-    Result:=0
-  else
-    if (n1>=2) and (n1<=4) and ((n2<10) or (n2>=20)) then Result:=1
-    else Result:=2;
-end;
-
-function GetPluralForm3SK(Number: Integer): Integer;
-begin
-  Number:=abs(Number);
-  if number=1 then Result:=0
-  else if (number<5) and (number<>0) then Result:=1
-  else Result:=2;
-end;
-
-function GetPluralForm4SL(Number: Integer): Integer;
-var
-  n2:byte;
-begin
-  Number:=abs(Number);
-  n2:=Number mod 100;
-  if n2=1 then Result:=0
-  else
-  if n2=2 then Result:=1
-  else
-  if (n2=3) or (n2=4) then Result:=2
-  else
-    Result:=3;
-end;
-
-procedure TDomain.GetListOfLanguages(list: TStrings);
-var
-  sr:TSearchRec;
-  more:boolean;
-  filename, path:FilenameString;
-  langcode:LanguageString;
-  i, j:integer;
-begin
-  list.Clear;
-
-  // Iterate through filesystem
-  more:=FindFirst (Directory+'*',faAnyFile,sr)=0;
-  try
-    while more do begin
-      if (sr.Attr and faDirectory<>0) and (sr.name<>'.') and (sr.name<>'..') then begin
-        filename := Directory + sr.Name + PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo';
-        if fileexists(filename) then begin
-          langcode:=lowercase(sr.name);
-          if list.IndexOf(langcode)=-1 then
-            list.Add(langcode);
-        end;
-      end;
-      more:=FindNext (sr)=0;
-    end;
-  finally
-    FindClose (sr);
-  end;
-
-  // Iterate through embedded files
-  for i:=0 to FileLocator.filelist.Count-1 do begin
-    filename:=FileLocator.basedirectory+FileLocator.filelist.Strings[i];
-    path:=Directory;
-    {$ifdef MSWINDOWS}
-    path:=uppercase(path);
-    filename:=uppercase(filename);
-    {$endif}
-    j:=length(path);
-    if MidStr(filename,1,j)=path then begin
-      path:=PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo';
-      {$ifdef MSWINDOWS}
-      path:=uppercase(path);
-      {$endif}
-      if MidStr(filename,length(filename)-length(path)+1,length(path))=path then begin
-        langcode:=lowercase(MidStr(filename,j+1,length(filename)-length(path)-j));
-        langcode:=LeftStr(langcode,3)+uppercase(MidStr(langcode,4,maxint));
-        if list.IndexOf(langcode)=-1 then
-          list.Add(langcode);
-      end;
-    end;
-  end;
-end;
-
-procedure TDomain.SetFilename(const filename: FilenameString);
-begin
-  CloseMoFile;
-  vDirectory := '';
-  SpecificFilename:=filename;
-end;
-
-function TDomain.gettext(const msgid: RawUtf8String): RawUtf8String;
-var
-  found:boolean;
-begin
-  if not Enabled then begin
-    Result:=msgid;
-    exit;
-  end;
-  if (mofile=nil) and (not OpenHasFailedBefore) then
-    OpenMoFile;
-  if mofile=nil then begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugLogger('.mo file is not open. Not translating "'+string(msgid)+'"');
-    {$endif}
-    Result := msgid;
-  end else begin
-    Result:=mofile.gettext(msgid,found);
-    {$ifdef DXGETTEXTDEBUG}
-    if found then
-      DebugLogger ('Found in .mo ('+Domain+'): "'+string(utf8encode(msgid))+'"->"'+string(utf8encode(Result))+'"')
-    else
-      DebugLogger ('Translation not found in .mo file ('+Domain+') : "'+string(utf8encode(msgid))+'"');
-    {$endif}
-  end;
-end;
-
-constructor TDomain.Create;
-begin
-  inherited Create;
-  Enabled:=True;
-end;
-
-{ TGnuGettextInstance }
-
-procedure TGnuGettextInstance.bindtextdomain(const szDomain:DomainString;
-  const szDirectory: FilenameString);
-var
-  dir:FilenameString;
-begin
-  dir:=IncludeTrailingPathDelimiter(szDirectory);
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Text domain "'+szDomain+'" is now located at "'+dir+'"');
-  {$endif}
-  getdomain(szDomain,DefaultDomainDirectory,CurLang).Directory := dir;
-  WhenNewDomainDirectory (szDomain, szDirectory);
-end;
-
-constructor TGnuGettextInstance.Create(LocaleName: LanguageString = '');
-begin
-  {$ifdef dx_EMPTY_TO_EMPTY}
-  EmptyToEmpty := True;
-  {$endif}
-
-  {$ifdef MSWindows}
-  DesignTimeCodePage:=CP_ACP;
-  {$endif}
-  {$ifdef DXGETTEXTDEBUG}
-  DebugLogCS:=TMultiReadExclusiveWriteSynchronizer.Create;
-  DebugLog:=TMemoryStream.Create;
-  DebugWriteln('Debug log started '+DateTimeToStr(Now));
-  DebugWriteln('GNU gettext module version: '+VCSVersion);
-  DebugWriteln('');
-  {$endif}
-  curGetPluralForm:=GetPluralForm2EN;
-  Enabled:=True;
-  SearchAllDomains:=False;
-  curmsgdomain:=DefaultTextDomain;
-  savefileCS := TMultiReadExclusiveWriteSynchronizer.Create;
-  domainlist := TStringList.Create;
-  TP_IgnoreList:=TStringList.Create;
-  TP_IgnoreList.Sorted:=True;
-  TP_GlobalClassHandling:=TList.Create;
-  TP_ClassHandling:=TList.Create;
-  fWhenNewLanguageListeners := TInterfaceList.Create;
-
-  // Set some settings
-  DefaultDomainDirectory := IncludeTrailingPathDelimiter(extractfilepath(ExecutableFilename))+'locale';
-
-  UseLanguage(LocaleName);
-
-  bindtextdomain(DefaultTextDomain, DefaultDomainDirectory);
-  textdomain(DefaultTextDomain);
-
-  // Add default properties to ignore
-  TP_GlobalIgnoreClassProperty(TComponent,'Name');
-  TP_GlobalIgnoreClassProperty(TCollection,'PropName');
-end;
-
-destructor TGnuGettextInstance.Destroy;
-begin
-  if savememory <> nil then begin
-    savefileCS.BeginWrite;
-    try
-      CloseFile(savefile);
-    finally
-      savefileCS.EndWrite;
-    end;
-    FreeAndNil(savememory);
-  end;
-  FreeAndNil (savefileCS);
-  FreeAndNil (TP_IgnoreList);
-  while TP_GlobalClassHandling.Count<>0 do begin
-    TObject(TP_GlobalClassHandling.Items[0]).Free;
-    TP_GlobalClassHandling.Delete(0);
-  end;
-  FreeAndNil (TP_GlobalClassHandling);
-  FreeTP_ClassHandlingItems;
-  FreeAndNil (TP_ClassHandling);
-  while domainlist.Count <> 0 do begin
-    domainlist.Objects[0].Free;
-    domainlist.Delete(0);
-  end;
-  FreeAndNil(domainlist);
-  fWhenNewLanguageListeners.Free;
-  {$ifdef DXGETTEXTDEBUG}
-  FreeAndNil (DebugLog);
-  FreeAndNil (DebugLogCS);
-  {$endif}
-  inherited;
-end;
-
-{$ifndef UNICODE}
-function TGnuGettextInstance.dgettext(const szDomain: DomainString; const szMsgId: ansistring): TranslatedUnicodeString;
-begin
-  Result:=dgettext(szDomain, ansi2wideDTCP(szMsgId));
-end;
-{$endif}
-
-function TGnuGettextInstance.dgettext(const szDomain: DomainString;
-  const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  if not Enabled then begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('Translation has been disabled. Text is not being translated: '+szMsgid);
-    {$endif}
-    Result:=szMsgId;
-  end else begin
-    if EmptyToEmpty and (szMsgId = '') then begin
-      Result := '';
-    end else begin
-      Result:=UTF8Decode(EnsureLineBreakInTranslatedString(getdomain(szDomain,DefaultDomainDirectory,CurLang).gettext(StripCRRawMsgId(utf8encode(szMsgId)))));
-
-      {$ifdef DXGETTEXTDEBUG}
-      if (szMsgId<>'') and (Result='') then
-        DebugWriteln (Format('Error: Translation of %s was an empty string. This may never occur.',[szMsgId]));
-      {$endif}
-    end;
-  end;
-end;
-
-function TGnuGettextInstance.dgettext_NoExtract(const szDomain: DomainString;
-  const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result:=dgettext(szDomain,szMsgId);
-end;
-
-function TGnuGettextInstance.dgettext_NoOp(const szDomain: DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  Result := gettext_NoOp( szMsgId);
-end;
-
-function TGnuGettextInstance.GetCurrentLanguage: LanguageString;
-begin
-  Result:=GetCurrentLocaleName;
-end;
-
-function TGnuGettextInstance.GetCurrentLanguageCode: LanguageString;
-begin
-  Result := LocaleNameToLanguageCode(GetCurrentLocaleName);
-end;
-
-function TGnuGettextInstance.GetCurrentLocaleName: LanguageString;
-begin
-  Result:=curlang;
-end;
-
-function TGnuGettextInstance.getcurrenttextdomain: DomainString;
-begin
-  Result := curmsgdomain;
-end;
-
-{$ifndef UNICODE}
-function TGnuGettextInstance.gettext(
-  const szMsgId: ansistring): 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;
-{$endif}
-
-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;
-
-function TGnuGettextInstance.gettext_NoExtract(
-  const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result:=gettext (szMsgId);
-end;
-
-function TGnuGettextInstance.gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString;
-begin
-  //*** With this function Strings can be added to the po-file without being
-  //    ResourceStrings (dxgettext will add the string and this function will
-  //    return it without a change)
-  //    see gettext manual
-  //      4.7 - Special Cases of Translatable Strings
-  //      http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases
-  Result := TranslatedUnicodeString(szMsgId);
-end;
-
-procedure TGnuGettextInstance.pgettext_fixup(const szLookup,szMsgId: MsgIdString; var szTranslation: MsgIdString);
-begin
-  if szTranslation = szLookup then
-    szTranslation := szMsgId;
-end;
-
-function TGnuGettextInstance.pgettext(const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-var
-  lookup: MsgIdString;
-begin
-  lookup := szMsgCtxt + GETTEXT_CONTEXT_GLUE + szMsgId;
-  Result := gettext(lookup);
-  pgettext_fixup(lookup, szMsgId, Result);
-end;
-
-function TGnuGettextInstance.pdgettext(const szDomain: DomainString; const szMsgCtxt,szMsgId: MsgIdString): TranslatedUnicodeString;
-var
-  lookup: MsgIdString;
-begin
-  lookup := szMsgCtxt + GETTEXT_CONTEXT_GLUE + szMsgId;
-  Result := dgettext(szDomain, lookup);
-  pgettext_fixup(lookup, szMsgId, Result);
-end;
-
-function TGnuGettextInstance.pngettext(const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-var
-  lookup: MsgIdString;
-begin
-  lookup := szMsgCtxt + GETTEXT_CONTEXT_GLUE + singular;
-  Result := ngettext(lookup, plural, Number);
-  pgettext_fixup(lookup, singular, Result);
-end;
-
-function TGnuGettextInstance.pdngettext(const szDomain: DomainString; const szMsgCtxt,singular,plural: MsgIdString; Number:longint): TranslatedUnicodeString;
-var
-  lookup: MsgIdString;
-begin
-  lookup := szMsgCtxt + GETTEXT_CONTEXT_GLUE + singular;
-  Result := dngettext(szDomain, lookup, plural, Number);
-  pgettext_fixup(lookup, singular, Result);
-end;
-
-procedure TGnuGettextInstance.textdomain(const szDomain: DomainString);
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Changed text domain to "'+szDomain+'"');
-  {$endif}
-  curmsgdomain := szDomain;
-  WhenNewDomain (szDomain);
-end;
-
-function TGnuGettextInstance.TP_CreateRetranslator : TExecutable;
-var
-  ttpr:TTP_Retranslator;
-begin
-  ttpr:=TTP_Retranslator.Create;
-  ttpr.Instance:=self;
-  TP_Retranslator:=ttpr;
-  Result:=ttpr;
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('A retranslator was created.');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TP_GlobalHandleClass(HClass: TClass;
-  Handler: TTranslator);
-var
-  cm:TClassMode;
-  i:integer;
-begin
-  for i:=0 to TP_GlobalClassHandling.Count-1 do begin
-    cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-    if cm.HClass=HClass then
-      raise EGGProgrammingError.Create ('You cannot set a handler for a class that has already been assigned otherwise.');
-    if HClass.InheritsFrom(cm.HClass) then begin
-      // This is the place to insert this class
-      cm:=TClassMode.Create;
-      cm.HClass:=HClass;
-      cm.SpecialHandler:=Handler;
-      TP_GlobalClassHandling.Insert(i,cm);
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('A handler was set for class '+HClass.ClassName+'.');
-      {$endif}
-      exit;
-    end;
-  end;
-  cm:=TClassMode.Create;
-  cm.HClass:=HClass;
-  cm.SpecialHandler:=Handler;
-  TP_GlobalClassHandling.Add(cm);
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('A handler was set for class '+HClass.ClassName+'.');
-  {$endif}
-end;
-
-function TGnuGettextInstance.TP_TryGlobalIgnoreClass (IgnClass:TClass): boolean;
-var
-  cm:TClassMode;
-  i:integer;
-begin
-  Result := false;
-  for i:=0 to TP_GlobalClassHandling.Count-1 do begin
-    cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-    if cm.HClass=IgnClass then
-      exit; // class already in ignore list
-    if IgnClass.InheritsFrom(cm.HClass) then begin
-      // This is the place to insert this class
-      cm:=TClassMode.Create;
-      cm.HClass:=IgnClass;
-      TP_GlobalClassHandling.Insert(i,cm);
-      Result := true;
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Globally, class '+IgnClass.ClassName+' is being ignored.');
-      {$endif}
-      exit;
-    end;
-  end;
-  cm:=TClassMode.Create;
-  cm.HClass:=IgnClass;
-  TP_GlobalClassHandling.Add(cm);
-  Result := true;
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Globally, class '+IgnClass.ClassName+' is being ignored.');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TP_GlobalIgnoreClass(IgnClass: TClass);
-begin
-  if not TP_TryGlobalIgnoreClass(IgnClass) then
-    raise EGGProgrammingError.Create ('You cannot add a class to the ignore list that is already on that list: '+IgnClass.ClassName+'. You should keep all TP_Global functions in one place in your source code.');
-end;
-
-procedure TGnuGettextInstance.TP_GlobalIgnoreClassProperty(
-  IgnClass: TClass; propertyname: ComponentNameString);
-var
-  cm:TClassMode;
-  i,idx:integer;
-begin
-  propertyname:=uppercase(propertyname);
-  for i:=0 to TP_GlobalClassHandling.Count-1 do begin
-    cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-    if cm.HClass=IgnClass then begin
-      if Assigned(cm.SpecialHandler) then
-        raise EGGProgrammingError.Create ('You cannot ignore a class property for a class that has a handler set.');
-      if not cm.PropertiesToIgnore.Find(propertyname,idx) then
-        cm.PropertiesToIgnore.Add(propertyname);
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.');
-      {$endif}
-      exit;
-    end;
-    if IgnClass.InheritsFrom(cm.HClass) then begin
-      // This is the place to insert this class
-      cm:=TClassMode.Create;
-      cm.HClass:=IgnClass;
-      cm.PropertiesToIgnore.Add(propertyname);
-      TP_GlobalClassHandling.Insert(i,cm);
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.');
-      {$endif}
-      exit;
-    end;
-  end;
-  cm:=TClassMode.Create;
-  cm.HClass:=IgnClass;
-  cm.PropertiesToIgnore.Add(propertyname);
-  TP_GlobalClassHandling.Add(cm);
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TP_Ignore(AnObject: TObject;
-  const name: ComponentNameString);
-begin
-  TP_IgnoreList.Add(uppercase(name));
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('On object with class name '+AnObject.ClassName+', ignore is set on '+name);
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TranslateComponent(AnObject: TComponent;
-  const TextDomain: DomainString);
-var
-  comp:TGnuGettextComponentMarker;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('======================================================================');
-  DebugWriteln ('TranslateComponent() was called for a component with name '+AnObject.Name+'.');
-  {$endif}
-  comp:=AnObject.FindComponent('GNUgettextMarker') as TGnuGettextComponentMarker;
-  if comp=nil then begin
-    comp:=TGnuGettextComponentMarker.Create (nil);
-    comp.Name:='GNUgettextMarker';
-    comp.Retranslator:=TP_CreateRetranslator;
-    TranslateProperties (AnObject, TextDomain);
-    AnObject.InsertComponent(comp);
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('This is the first time, that this component has been translated. A retranslator component has been created for this component.');
-    {$endif}
-  end else begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('This is not the first time, that this component has been translated.');
-    {$endif}
-    if comp.LastLanguage<>curlang then begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('ERROR: TranslateComponent() was called twice with different languages. This indicates an attempt to switch language at runtime, but by using TranslateComponent every time. This API has changed - please use RetranslateComponent() instead.');
-      {$endif}
-      {$ifdef mswindows}
-      MessageBox (0,'This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information.','Error',MB_OK);
-      {$else}
-      writeln (stderr,'This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information.');
-      {$endif}
-    end else begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('ERROR: TranslateComponent has been called twice, but with the same language chosen. This is a mistake, but in order to prevent that the application breaks, no exception is raised.');
-      {$endif}
-    end;
-  end;
-  comp.LastLanguage:=curlang;
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('======================================================================');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TranslateProperty (AnObject:TObject; PropInfo:PPropInfo; TodoList:TStrings; const TextDomain:DomainString);
-var
-  ppi:PPropInfo;
-  ws: TranslatedUnicodeString;
-  old: TranslatedUnicodeString;
-  compmarker:TComponent;
-  obj:TObject;
-  Propname:ComponentNameString;
-begin
-  PropName:=string(PropInfo^.Name);
-  try
-    // Translate certain types of properties
-    case PropInfo^.PropType^.Kind of
-      {$IFDEF UNICODE}
-      // All dfm files returning tkUString
-      tkString, tkLString, tkWString, tkUString:
-      {$ELSE}
-      tkString, tkLString, tkWString:
-      {$ENDIF}
-        begin
-          {$ifdef DXGETTEXTDEBUG}
-          DebugWriteln ('Translating '+AnObject.ClassName+'.'+PropName);
-          {$endif}
-          case PropInfo^.PropType^.Kind of
-            tkString, tkLString :
-              old := GetStrProp(AnObject, PropName);
-            tkWString :
-              old := doGetWideStrProp(AnObject, Propname);
-            {$IFDEF UNICODE}
-            tkUString :
-              old := doGetUnicodeStrProp(AnObject, Propname);
-            {$ENDIF}
-          else
-            raise Exception.Create ('Internal error: Illegal property type. This problem needs to be solved by a programmer, try to find a workaround.');
-          end;
-          {$ifdef DXGETTEXTDEBUG}
-          if old='' then
-            DebugWriteln ('(Empty, not translated)')
-          else
-            DebugWriteln ('Old value: "'+old+'"');
-          {$endif}
-          if (old <> '') and (IsWriteProp(PropInfo)) then begin
-            if TP_Retranslator<>nil then
-              (TP_Retranslator as TTP_Retranslator).Remember(AnObject, PropName, old);
-            if textdomain = '' then
-              ws := ComponentGettext(old, Self)
-            else
-              ws := dgettext(textdomain,old);
-            if ws <> old then begin
-              ppi:=GetPropInfo(AnObject, Propname);
-              if ppi<>nil then begin
-                SetWideStrProp(AnObject, ppi, ws);
-              end else begin
-                {$ifdef DXGETTEXTDEBUG}
-                DebugWriteln ('ERROR: Property disappeared: '+Propname+' for object of type '+AnObject.ClassName);
-                {$endif}
-              end;
-            end;
-          end;
-        end { case item };
-      tkClass:
-        begin
-          obj:=GetObjectProp(AnObject, PropName);
-          if obj<>nil then begin
-            if obj is TComponent then begin
-              compmarker := TComponent(obj).FindComponent('GNUgettextMarker');
-              if Assigned(compmarker) then
-                exit;
-            end;
-            TodoList.AddObject ('',obj);
-          end;
-        end { case item };
-      end { case };
-  except
-    on E:Exception do
-      raise EGGComponentError.Create ('Property cannot be translated.'+sLineBreak+
-        'Add TP_GlobalIgnoreClassProperty('+AnObject.ClassName+','''+PropName+''') to your source code or use'+sLineBreak+
-        'TP_Ignore (self,''.'+PropName+''') to prevent this message.'+sLineBreak+
-        'Reason: '+e.Message);
-  end;
-end;
-
-function ObjectHasAssignedAction(AnObject: TObject; PropList: PPropList; Count: Integer; var ActionProperty: TObject): Boolean;
-var
-  I: Integer;
-  PropInfo: PPropInfo;
-  Obj: TObject;
-begin
-  Result := False;
-  I := 0;
-  while not Result and (I < Count) do
-  begin
-    PropInfo := PropList[I];
-    if (PropInfo^.PropType^.Kind = tkClass) then
-    begin
-      Obj := GetObjectProp(AnObject, string(PropInfo.Name));
-      Result := Obj is TBasicAction;
-      if Result then
-        ActionProperty := Obj;
-    end;
-
-    Inc(I);
-  end;
-end;
-
-function TGnuGettextInstance.ClassIsIgnored(AClass:TClass): Boolean;
-var
-  cm:TClassMode;
-  i:integer;
-begin
-  for i:=0 to TP_GlobalClassHandling.Count-1 do begin
-    cm:=TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-    if AClass.InheritsFrom(cm.HClass) and (cm.PropertiesToIgnore.Count = 0) then
-    begin
-      Result := True;
-      exit;
-    end;
-  end;
-  for i:=0 to TP_ClassHandling.Count-1 do begin
-    cm:=TObject(TP_ClassHandling.Items[i]) as TClassMode;
-    if AClass.InheritsFrom(cm.HClass) then
-    begin
-      Result := True;
-      exit;
-    end;
-  end;
-  Result := False;
-end;
-
-procedure TGnuGettextInstance.TranslateProperties(AnObject: TObject; textdomain:DomainString='');
-var
-  TodoList:TStringList; // List of Name/TObject's that is to be processed
-  DoneList:TStringList; // List of hex codes representing pointers to objects that have been done
-  i, j, Count: integer;
-  PropList: PPropList;
-  UPropName: ComponentNameString;
-  PropInfo: PPropInfo;
-  compmarker,
-  comp:TComponent;
-  cm,
-  currentcm:TClassMode; // currentcm is nil or contains special information about how to handle the current object
-  ObjectPropertyIgnoreList:TStringList;
-  objid:string;
-  Name:ComponentNameString;
-  ActionProperty:TObject;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('----------------------------------------------------------------------');
-  DebugWriteln ('TranslateProperties() was called for an object of class '+AnObject.ClassName+' with domain "'+textdomain+'".');
-  {$endif}
-
-  if TP_Retranslator<>nil then
-    if textdomain = '' then
-      (TP_Retranslator as TTP_Retranslator).TextDomain:=curmsgdomain
-    else
-      (TP_Retranslator as TTP_Retranslator).TextDomain:=textdomain;
-  {$ifdef FPC}
-  DoneList:=TCSStringList.Create;
-  TodoList:=TCSStringList.Create;
-  ObjectPropertyIgnoreList:=TCSStringList.Create;
-  {$else}
-  DoneList:=TStringList.Create;
-  TodoList:=TStringList.Create;
-  ObjectPropertyIgnoreList:=TStringList.Create;
-  {$endif}
-  try
-    TodoList.AddObject('', AnObject);
-    DoneList.Sorted:=True;
-    ObjectPropertyIgnoreList.Sorted:=True;
-    ObjectPropertyIgnoreList.Duplicates:=dupIgnore;
-    ObjectPropertyIgnoreList.CaseSensitive:=False;
-    DoneList.Duplicates:=dupError;
-    DoneList.CaseSensitive:=True;
-
-    while TodoList.Count<>0 do begin
-      AnObject:=TodoList.Objects[0];
-      Name:=TodoList.Strings[0];
-      TodoList.Delete(0);
-      if (AnObject<>nil) and (AnObject is TPersistent) then begin
-        // Make sure each object is only translated once
-        Assert (sizeof({$IFDEF CPUx64}NativeInt{$ELSE}Integer{$ENDIF CPUx64})=sizeof(TObject));
-        objid:=IntToHex({$IFDEF CPUx64}NativeInt{$ELSE}Integer{$ENDIF CPUx64}(AnObject),8);
-        if DoneList.Find(objid,i) then begin
-          continue;
-        end else begin
-          DoneList.Add(objid);
-        end;
-
-        ObjectPropertyIgnoreList.Clear;
-
-        // Find out if there is special handling of this object
-        currentcm:=nil;
-        // First check the local handling instructions
-        for j:=0 to TP_ClassHandling.Count-1 do begin
-          cm:=TObject(TP_ClassHandling.Items[j]) as TClassMode;
-          if AnObject.InheritsFrom(cm.HClass) then begin
-            if cm.PropertiesToIgnore.Count<>0 then begin
-              ObjectPropertyIgnoreList.AddStrings(cm.PropertiesToIgnore);
-            end else begin
-              // Ignore the entire class
-              currentcm:=cm;
-              break;
-            end;
-          end;
-        end;
-        // Then check the global handling instructions
-        if currentcm=nil then
-        for j:=0 to TP_GlobalClassHandling.Count-1 do begin
-          cm:=TObject(TP_GlobalClassHandling.Items[j]) as TClassMode;
-          if AnObject.InheritsFrom(cm.HClass) then begin
-            if cm.PropertiesToIgnore.Count<>0 then begin
-              ObjectPropertyIgnoreList.AddStrings(cm.PropertiesToIgnore);
-            end else begin
-              // Ignore the entire class
-              currentcm:=cm;
-              break;
-            end;
-          end;
-        end;
-        if currentcm<>nil then begin
-          ObjectPropertyIgnoreList.Clear;
-          // Ignore or use special handler
-          if Assigned(currentcm.SpecialHandler) then begin
-            currentcm.SpecialHandler (AnObject);
-            {$ifdef DXGETTEXTDEBUG}
-            DebugWriteln ('Special handler activated for '+AnObject.ClassName);
-            {$endif}
-          end else begin
-            {$ifdef DXGETTEXTDEBUG}
-            DebugWriteln ('Ignoring object '+AnObject.ClassName);
-            {$endif}
-          end;
-          continue;
-        end;
-
-        Count := GetPropList(AnObject, PropList);
-        try
-          if ObjectHasAssignedAction(AnObject, PropList, Count, ActionProperty) and not ClassIsIgnored(ActionProperty.ClassType) then
-            Continue;
-
-          for j := 0 to Count - 1 do begin
-            PropInfo := PropList[j];
-            {$IFDEF UNICODE}
-            if not (PropInfo^.PropType^.Kind in [tkString, tkLString, tkWString, tkClass, tkUString]) then
-            {$ELSE}
-            if not (PropInfo^.PropType^.Kind in [tkString, tkLString, tkWString, tkClass]) then
-            {$ENDIF}
-              continue;
-            UPropName:=uppercase(string(PropInfo^.Name));
-            // Ignore properties that are meant to be ignored
-            if ((currentcm=nil) or (not currentcm.PropertiesToIgnore.Find(UPropName,i))) and
-               (not TP_IgnoreList.Find(Name+'.'+UPropName,i)) and
-               (not ObjectPropertyIgnoreList.Find(UPropName,i)) then begin
-              TranslateProperty (AnObject,PropInfo,TodoList,TextDomain);
-            end;  // if
-          end;  // for
-        finally
-          if Count<>0 then
-            FreeMem (PropList);
-        end;
-        {$IFDEF dx_has_WideStrings}
-        if AnObject is TWideStrings then begin
-          if ((AnObject as TWideStrings).Text<>'') and (TP_Retranslator<>nil) then
-            (TP_Retranslator as TTP_Retranslator).Remember(AnObject, 'Text', (AnObject as TWideStrings).Text);
-          TranslateWideStrings (AnObject as TWideStrings,TextDomain);
-        end;
-        {$ENDIF dx_has_WideStrings}
-        if AnObject is TStrings then begin
-          if ((AnObject as TStrings).Text<>'') and (TP_Retranslator<>nil) then
-            (TP_Retranslator as TTP_Retranslator).Remember(AnObject, 'Text', (AnObject as TStrings).Text);
-          TranslateStrings (AnObject as TStrings,TextDomain);
-        end;
-        // Check for TCollection
-        if AnObject is TCollection then begin
-          for i := 0 to (AnObject as TCollection).Count - 1 do begin
-            // Only add the object if it's not totally ignored already
-            if not Assigned(currentcm) or not AnObject.InheritsFrom(currentcm.HClass) then
-              TodoList.AddObject('',(AnObject as TCollection).Items[i]);
-          end;
-        end;
-        if AnObject is TComponent then begin
-          for i := 0 to TComponent(AnObject).ComponentCount - 1 do begin
-            comp:=TComponent(AnObject).Components[i];
-            if (not TP_IgnoreList.Find(uppercase(comp.Name),j)) then begin
-              // Only add the object if it's not totally ignored or translated already
-              if not Assigned(currentcm) or not AnObject.InheritsFrom(currentcm.HClass) then begin
-                compmarker := comp.FindComponent('GNUgettextMarker');
-                if not Assigned(compmarker) then
-                  TodoList.AddObject(uppercase(comp.Name),comp);
-              end;
-            end;
-          end;
-        end;
-      end { if AnObject<>nil };
-    end { while todolist.count<>0 };
-  finally
-    FreeAndNil (todolist);
-    FreeAndNil (ObjectPropertyIgnoreList);
-    FreeAndNil (DoneList);
-  end;
-  FreeTP_ClassHandlingItems;
-  TP_IgnoreList.Clear;
-  TP_Retranslator:=nil;
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('----------------------------------------------------------------------');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.UnregisterWhenNewLanguageListener(
-  Listener: IGnuGettextInstanceWhenNewLanguageListener);
-begin
-  fWhenNewLanguageListeners.Remove(Listener);
-end;
-
-procedure TGnuGettextInstance.UseLanguage(LocaleName: LanguageString);
-var
-  i,p:integer;
-  dom:TDomain;
-  l2:string;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln('UseLanguage('''+LocaleName+'''); called');
-  {$endif}
-
-  if LocaleName='' then begin
-    LocaleName:=GGGetEnvironmentVariable('LANG');
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('LANG env variable is '''+LocaleName+'''.');
-    {$endif}
-    {$ifdef MSWINDOWS}
-    if LocaleName='' then begin
-      LocaleName:=GetWindowsLanguage;
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Found Windows language code to be '''+LocaleName+'''.');
-      {$endif}
-    end;
-    {$endif}
-    p:=pos('.',LocaleName);
-    if p<>0 then
-      LocaleName:=LeftStr(LocaleName,p-1);
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('Language code that will be set is '''+LocaleName+'''.');
-    {$endif}
-  end;
-
-  curlang := LocaleName;
-  for i:=0 to domainlist.Count-1 do begin
-    dom:=domainlist.Objects[i] as TDomain;
-    dom.SetLanguageCode (curlang);
-  end;
-
-  l2:=lowercase(LeftStr(curlang,2));
-  if (l2='en') or (l2='de') then curGetPluralForm:=GetPluralForm2EN else
-  if (l2='hu') or (l2='ko') or (l2='zh') or (l2='ja') or (l2='tr') then curGetPluralForm:=GetPluralForm1 else
-  if (l2='fr') or (l2='fa') or (lowercase(curlang)='pt_br') then curGetPluralForm:=GetPluralForm2FR else
-  if (l2='lv') then curGetPluralForm:=GetPluralForm3LV else
-  if (l2='ga') then curGetPluralForm:=GetPluralForm3GA else
-  if (l2='lt') then curGetPluralForm:=GetPluralForm3LT else
-  if (l2='ru') or (l2='uk') or (l2='hr') then curGetPluralForm:=GetPluralForm3RU else
-  if (l2='cs') or (l2='sk') then curGetPluralForm:=GetPluralForm3SK else
-  if (l2='pl') then curGetPluralForm:=GetPluralForm3PL else
-  if (l2='sl') then curGetPluralForm:=GetPluralForm4SL else begin
-    curGetPluralForm:=GetPluralForm2EN;
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('Plural form for the language was not found. English plurality system assumed.');
-    {$endif}
-  end;
-
-  WhenNewLanguage (curlang);
-
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln('');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TranslateStrings(sl: TStrings;const TextDomain:DomainString);
-var
-  line: string;
-  i: integer;
-  tempSL: TStringList;
-  {$ifdef dx_StringList_has_OwnsObjects}
-  slAsTStringList: TStringList;
-  originalOwnsObjects: Boolean;
-  {$endif dx_StringList_has_OwnsObjects}
-begin
-  if sl.Count > 0 then begin
-    {$ifdef dx_StringList_has_OwnsObjects}
-    // From D2009 onward, the TStringList class has an OwnsObjects property, just like
-    // TObjectList has. This means that if we call Clear on the given
-    // list in the sl parameter, we could destroy the objects it contains.
-    // To avoid this we must disable OwnsObjects while we replace the strings, but
-    // only if sl is a TStringList instance and if using Delphi 2009 or later.
-    originalOwnsObjects := False; // avoid warning
-    if sl is TStringList then
-      slAsTStringList := TStringList(sl)
-    else
-      slAsTStringList := nil;
-    {$endif dx_StringList_has_OwnsObjects}
-
-    sl.BeginUpdate;
-    try
-      tempSL:=TStringList.Create;
-      try
-        // don't use Assign here as it will propagate the Sorted property (among others)
-        // in versions of Delphi from Delphi XE onward
-        tempSL.AddStrings(sl);
-
-        for i:=0 to tempSL.Count-1 do begin
-          line:=tempSL.Strings[i];
-          if line<>'' then
-            if (TextDomain = '') or (TextDomain = DefaultTextDomain) then
-              tempSL.Strings[i]:=ComponentGettext(line, Self)
-            else
-              tempSL.Strings[i]:=dgettext(TextDomain,line);
-        end;
-
-        //DH Fix 2013-09-19: Only refill sl if changed
-        if sl.Text<>tempSL.Text then
-        begin
-          {$ifdef dx_StringList_has_OwnsObjects}
-          if Assigned(slAsTStringList) then begin
-            originalOwnsObjects := slAsTStringList.OwnsObjects;
-            slAsTStringList.OwnsObjects := False;
-          end;
-          {$endif dx_StringList_has_OwnsObjects}
-          try
-            {$ifdef dx_StringList_has_OwnsObjects}
-            if Assigned(slAsTStringList) and slAsTStringList.Sorted then
-            begin
-              // TStringList doesn't release the objects in PutObject, so we use this to get
-              // sl.Clear to not destroy the objects in classes that inherit from TStringList
-              // but do a ClearObject in Clear.
-              //
-              // todo: Check whether this should be
-              //   if sl is TStringList then
-              // instead.
-              if sl.ClassType <> TStringList then
-                for I := 0 to sl.Count - 1 do
-                  sl.Objects[I] := nil;
-
-              // same here, we don't use assign because we don't want to modify the properties of the orignal string list
-              sl.Clear;
-              sl.AddStrings(tempSL);
-            end
-            else
-            {$endif dx_StringList_has_OwnsObjects}
-            begin
-              for i := 0 to sl.Count - 1 do
-                sl[i] := tempSL[i];
-            end;
-          finally
-            {$ifdef dx_StringList_has_OwnsObjects}
-            if Assigned(slAsTStringList) then
-              slAsTStringList.OwnsObjects := originalOwnsObjects;
-            {$endif dx_StringList_has_OwnsObjects}
-          end;
-        end;
-      finally
-        FreeAndNil (tempSL);
-      end;
-    finally
-      sl.EndUpdate;
-    end;
-  end;
-end;
-
-{$IFDEF dx_has_WideStrings}
-procedure TGnuGettextInstance.TranslateWideStrings(sl: TWideStrings;
-  const TextDomain: DomainString);
-var
-  line: string;
-  i: integer;
-  tempSL:TWideStringList;
-  {$ifdef dx_StringList_has_OwnsObjects}
-  slAsTWideStringList:TWideStringList;
-  originalOwnsObjects: Boolean;
-  {$endif dx_StringList_has_OwnsObjects}
-begin
-  if sl.Count > 0 then begin
-    {$ifdef dx_StringList_has_OwnsObjects}
-    // From D2009 onward, the TWideStringList class has an OwnsObjects property, just like
-    // TObjectList has. This means that if we call Clear on the given
-    // list in the sl parameter, we could destroy the objects it contains.
-    // To avoid this we must disable OwnsObjects while we replace the strings, but
-    // only if sl is a TWideStringList instance and if using Delphi 2009 or later.
-    originalOwnsObjects := False; // avoid warning
-    if sl is TWideStringList then
-      slAsTWideStringList := TWideStringList(sl)
-    else
-      slAsTWideStringList := nil;
-    {$endif dx_StringList_has_OwnsObjects}
-
-    sl.BeginUpdate;
-    try
-      tempSL:=TWideStringList.Create;
-      try
-        // don't use Assign here as it will propagate the Sorted property (among others)
-        // in versions of Delphi from Delphi XE ownard
-        tempSL.AddStrings(sl);
-
-        for i:=0 to tempSL.Count-1 do begin
-          line:=tempSL.Strings[i];
-          if line<>'' then
-            if TextDomain = '' then
-              tempSL.Strings[i]:=ComponentGettext(line, Self)
-            else
-              tempSL.Strings[i]:=dgettext(TextDomain,line);
-        end;
-
-        //DH Fix 2013-09-19: Only refill sl if changed
-        if sl.Text<>tempSL.Text then
-        begin
-          {$ifdef dx_StringList_has_OwnsObjects}
-          if Assigned(slAsTWideStringList) then begin
-            originalOwnsObjects := slAsTWideStringList.OwnsObjects;
-            slAsTWideStringList.OwnsObjects := False;
-          end;
-          {$endif dx_StringList_has_OwnsObjects}
-          try
-            {$ifdef dx_StringList_has_OwnsObjects}
-            if Assigned(slAsTWideStringList) and slAsTWideStringList.Sorted then
-            begin
-              // TWideStringList doesn't release the objects in PutObject, so we use this to get
-              // sl.Clear to not destroy the objects in classes that inherit from TWideStringList
-              // but do a ClearObject in Clear.
-              //
-              // todo: Check whether this should be
-              //   if sl is TWideStringList then
-              // instead.
-              if sl.ClassType <> TWideStringList then
-                for I := 0 to sl.Count - 1 do
-                  sl.Objects[I] := nil;
-
-              // same here, we don't use assign because we don't want to modify the properties of the orignal string list
-              sl.Clear;
-              sl.AddStrings(tempSL);
-            end
-            else
-            {$endif dx_StringList_has_OwnsObjects}
-            begin
-              for i := 0 to sl.Count - 1 do
-                sl[i] := tempSL[i];
-            end;
-          finally
-            {$ifdef dx_StringList_has_OwnsObjects}
-            if Assigned(slAsTWideStringList) then
-              slAsTWideStringList.OwnsObjects := originalOwnsObjects;
-            {$endif dx_StringList_has_OwnsObjects}
-          end;
-        end;
-      finally
-        FreeAndNil (tempSL);
-      end;
-    finally
-      sl.EndUpdate;
-    end;
-  end;
-end;
-{$ENDIF dx_has_WideStrings}
-
-function TGnuGettextInstance.GetTranslatorNameAndEmail: TranslatedUnicodeString;
-begin
-  Result:=GetTranslationProperty('LAST-TRANSLATOR');
-end;
-
-function TGnuGettextInstance.GetTranslationProperty(
-  const Propertyname: ComponentNameString): TranslatedUnicodeString;
-begin
-  Result:=getdomain(curmsgdomain,DefaultDomainDirectory,CurLang).GetTranslationProperty (Propertyname);
-end;
-
-function TGnuGettextInstance.dngettext(const szDomain: DomainString; const singular, plural: MsgIdString;
-  Number: Integer): TranslatedUnicodeString;
-var
-  org:MsgIdString;
-  trans:TranslatedUnicodeString;
-  idx:integer;
-  p:integer;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('dngettext translation (domain '+szDomain+', number is '+IntTostr(Number)+') of '+singular+'/'+plural);
-  {$endif}
-  org:=singular+#0+plural;
-  trans:=dgettext(szDomain,org);
-  if org=trans then begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('Translation was equal to english version. English plural forms assumed.');
-    {$endif}
-    idx:=GetPluralForm2EN(Number)
-  end else
-    idx:=curGetPluralForm(Number);
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Index '+IntToStr(idx)+' will be used');
-  {$endif}
-  while true do begin
-    p:=pos(#0,trans);
-    if p=0 then begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Last translation used: '+string(utf8encode(trans)));
-      {$endif}
-      Result:=trans;
-      exit;
-    end;
-    if idx=0 then begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Translation found: '+string(utf8encode(trans)));
-      {$endif}
-      Result:=LeftStr(trans,p-1);
-      exit;
-    end;
-    delete (trans,1,p);
-    dec (idx);
-  end;
-end;
-
-function TGnuGettextInstance.dngettext_NoExtract(const szDomain: DomainString;
-  const singular, plural: MsgIdString;
-  Number: Integer): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result:=dngettext(szDomain,singular,plural,Number);
-end;
-
-{$ifndef UNICODE}
-function TGnuGettextInstance.ngettext(const singular, plural: ansistring;
-  Number: Integer): TranslatedUnicodeString;
-var
-  domain: DomainString;
-  domainIndex: Integer;
-begin
-  Result := dngettext(curmsgdomain, singular, plural, Number);
-  if SearchAllDomains then begin
-    domainIndex := 0;
-    while (Result <> singular) and (Result <> plural) and (domainIndex < domainlist.count) do begin
-      domain := domainlist[domainIndex];
-      Result := dngettext(domain, singular, plural, Number);
-      Inc(domainIndex);
-    end;
-  end;
-end;
-{$endif}
-
-function TGnuGettextInstance.ngettext(const singular, plural: MsgIdString;
-  Number: Integer): TranslatedUnicodeString;
-var
-  domain: DomainString;
-  domainIndex: Integer;
-begin
-  Result := dngettext(curmsgdomain, singular, plural, Number);
-  if SearchAllDomains then begin
-    domainIndex := 0;
-    while (Result <> singular) and (Result <> plural) and (domainIndex < domainlist.count) do begin
-      domain := domainlist[domainIndex];
-      Result := dngettext(domain, singular, plural, Number);
-      Inc(domainIndex);
-    end;
-  end;
-end;
-
-function TGnuGettextInstance.ngettext_NoExtract(const singular,
-  plural: MsgIdString; Number: Integer): TranslatedUnicodeString;
-begin
-  // This one is very useful for translating text in variables.
-  // This can sometimes be necessary, and by using this function,
-  // the source code scanner will not trigger warnings.
-  Result:=ngettext(singular,plural,Number);
-end;
-
-procedure TGnuGettextInstance.WhenNewDomain(const TextDomain: DomainString);
-begin
-  // This is meant to be empty.
-end;
-
-procedure TGnuGettextInstance.WhenNewLanguage(const LanguageID: LanguageString);
-var
-  I: Integer;
-begin
-  for I := 0 to fWhenNewLanguageListeners.Count - 1 do
-    IGnuGettextInstanceWhenNewLanguageListener(fWhenNewLanguageListeners[I]).WhenNewLanguage(LanguageID);
-end;
-
-procedure TGnuGettextInstance.WhenNewDomainDirectory(const TextDomain:DomainString; const Directory: FilenameString);
-begin
-  // This is meant to be empty.
-end;
-
-procedure TGnuGettextInstance.GetListOfLanguages(const domain: DomainString;
-  list: TStrings);
-begin
-  getdomain(Domain,DefaultDomainDirectory,CurLang).GetListOfLanguages(list);
-end;
-
-procedure TGnuGettextInstance.bindtextdomainToFile(const szDomain:DomainString; const filename: FilenameString);
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Text domain "'+szDomain+'" is now bound to file named "'+filename+'"');
-  {$endif}
-  getdomain(szDomain,DefaultDomainDirectory,CurLang).SetFilename (filename);
-end;
-
-procedure TGnuGettextInstance.DebugLogPause(PauseEnabled: boolean);
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugLogOutputPaused:=PauseEnabled;
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.DebugLogToFile(const filename: FilenameString; append:boolean=false);
-{$ifdef DXGETTEXTDEBUG}
-var
-  fs:TFileStream;
-  marker:ansistring;
-{$endif}
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  // Create the file if needed
-  if (not fileexists(filename)) or (not append) then
-    fileclose (filecreate (filename));
-
-  // Open file
-  fs:=TFileStream.Create (filename,fmOpenWrite or fmShareDenyWrite);
-  if append then
-    fs.Seek(0,soFromEnd);
-
-  // Write header if appending
-  if fs.Position<>0 then begin
-    marker:=sLineBreak+'==========================================================================='+sLineBreak;
-    fs.WriteBuffer(marker[1],length(marker));
-  end;
-
-  // Copy the memorystream contents to the file
-  if DebugLog <> nil then
-  begin
-    DebugLog.Seek(0,soFromBeginning);
-    fs.CopyFrom(DebugLog,0);
-  end;
-
-  // Make DebugLog point to the filestream
-  FreeAndNil (DebugLog);
-  DebugLog:=fs;
-  {$endif}
-end;
-
-{$ifdef DXGETTEXTDEBUG}
-procedure TGnuGettextInstance.DebugWriteln(Line: string);
-Var
-  Discard: Boolean;
-  ALine: AnsiString;
-begin
-  Assert (DebugLogCS<>nil);
-  Assert (DebugLog<>nil);
-
-  DebugLogCS.BeginWrite;
-  try
-    if DebugLogOutputPaused then
-      exit;
-
-    if Assigned (fOnDebugLine) then begin
-      Discard := True;
-      fOnDebugLine (Self, Line, Discard);
-      If Discard then Exit;
-    end;
-
-    ALine := AnsiString(Line);
-    ALine:=ALine+sLineBreak;
-
-    // Ensure that memory usage doesn't get too big.
-    if (DebugLog is TMemoryStream) and (DebugLog.Position>1000000) then begin
-      ALine:=sLineBreak+sLineBreak+sLineBreak+sLineBreak+sLineBreak+
-            'Debug log halted because memory usage grew too much.'+sLineBreak+
-            'Specify a filename to store the debug log in or disable debug loggin in gnugettext.pas.'+
-            sLineBreak+sLineBreak+sLineBreak+sLineBreak+sLineBreak;
-      DebugLogOutputPaused:=True;
-    end;
-    DebugLog.WriteBuffer(ALine[1],length(ALine));
-  finally
-    DebugLogCS.EndWrite;
-  end;
-end;
-{$endif}
-
-function TGnuGettextInstance.Getdomain(const domain:DomainString; const DefaultDomainDirectory:FilenameString;
-  const LocaleName: LanguageString): TDomain;
-// Retrieves the TDomain object for the specified domain.
-// Creates one, if none there, yet.
-var
-  idx: integer;
-begin
-  idx := domainlist.IndexOf(Domain);
-  if idx = -1 then begin
-    Result := TDomain.Create;
-    {$ifdef DXGETTEXTDEBUG}
-    Result.DebugLogger:=DebugWriteln;
-    {$endif}
-    Result.Domain := Domain;
-    Result.Directory := DefaultDomainDirectory;
-    Result.SetLanguageCode(LocaleName);
-    domainlist.AddObject(Domain, Result);
-  end else begin
-    Result := domainlist.Objects[idx] as TDomain;
-  end;
-end;
-
-function TGnuGettextInstance.GetResString(ResStringRec: PResStringRec): UnicodeString;
-{$ifdef MSWINDOWS}
-var
-  Len: Integer;
-  Buffer: array [0..1023] of char;
-{$endif}
-{$ifdef LINUX }
-const
-  ResStringTableLen = 16;
-type
-  ResStringTable = array [0..ResStringTableLen-1] of LongWord;
-var
-  Handle: TResourceHandle;
-  Tab: ^ResStringTable;
-  ResMod: HMODULE;
-{$endif }
-begin
-  if ResStringRec=nil then
-    exit;
-  if ResStringRec.Identifier>=64*1024 then begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('LoadResString was given an invalid ResStringRec.Identifier');
-    {$endif}
-    Result:='ERROR';
-    exit;
-  end;
-  {$ifdef LINUX}
-  // This works with Unicode if the Linux has utf-8 character set
-  // Result:=System.LoadResString(ResStringRec);
-  ResMod:=FindResourceHInstance(ResStringRec^.Module^);
-  Handle:=FindResource(ResMod,
-    PAnsiChar(ResStringRec^.Identifier div ResStringTableLen), PAnsiChar(6));   // RT_STRING
-  Tab:=Pointer(LoadResource(ResMod, Handle));
-  if Tab=nil then
-    Result:=''
-  else
-    Result:=PWideChar(PAnsiChar(Tab)+Tab[ResStringRec^.Identifier mod ResStringTableLen]);
-  {$endif}
-  {$ifdef MSWINDOWS}
-  if not Win32PlatformIsUnicode then begin
-    SetString(Result, Buffer,
-      LoadString(FindResourceHInstance(ResStringRec.Module^),
-        ResStringRec.Identifier, Buffer, Length(Buffer)))
-  end else begin
-    Result := '';
-    Len := 0;
-    While Length(Result)<=Len+1 do begin
-      if Length(Result) = 0 then
-        SetLength(Result, 1024)
-      else
-        SetLength(Result, Length(Result) * 2);
-      Len := LoadStringW(FindResourceHInstance(ResStringRec.Module^),
-        ResStringRec.Identifier, PWideChar(Result), Length(Result));
-    end;
-    SetLength(Result, Len);
-  end;
-  {$endif}
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Loaded resourcestring: '+string(utf8encode(Result)));
-  {$endif}
-end;
-
-function TGnuGettextInstance.ResourceStringGettext(MsgId: MsgIdString): TranslatedUnicodeString;
-var
-  i:integer;
-begin
-  if (MsgID='') or (ResourceStringDomainListCS=nil) then begin
-    // This only happens during very complicated program startups that fail,
-    // or when Msgid=''
-    Result:=MsgId;
-    exit;
-  end;
-  ResourceStringDomainListCS.BeginRead;
-  try
-    for i:=0 to ResourceStringDomainList.Count-1 do begin
-      Result:=dgettext(ResourceStringDomainList.Strings[i], MsgId);
-      if Result<>MsgId then
-        break;
-    end;
-  finally
-    ResourceStringDomainListCS.EndRead;
-  end;
-end;
-
-function TGnuGettextInstance.LoadResString(
-  ResStringRec: PResStringRec): UnicodeString;
-begin
-  Result:=ResourceStringGettext(GetResString(ResStringRec));
-end;
-
-function TGnuGettextInstance.PLoadResString(const szMsgCtxt: MsgIdString; ResStringRec: PResStringRec): UnicodeString;
-begin
-  Result:=PGettext(szMsgCtxt, GetResString(ResStringRec));
-end;
-
-procedure TGnuGettextInstance.RegisterWhenNewLanguageListener(
-  Listener: IGnuGettextInstanceWhenNewLanguageListener);
-begin
-  fWhenNewLanguageListeners.Add(Listener);
-end;
-
-procedure TGnuGettextInstance.RetranslateComponent(AnObject: TComponent;
-  const TextDomain: DomainString);
-var
-  comp:TGnuGettextComponentMarker;
-begin
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('======================================================================');
-  DebugWriteln ('RetranslateComponent() was called for a component with name '+AnObject.Name+'.');
-  {$endif}
-  comp:=AnObject.FindComponent('GNUgettextMarker') as TGnuGettextComponentMarker;
-  if comp=nil then
-  begin
-    {$ifdef DXGETTEXTDEBUG}
-    DebugWriteln ('Retranslate was called on an object that has not been translated before. An Exception is being raised.');
-    {$endif}
-    raise EGGProgrammingError.Create ('Retranslate was called on an object that has not been translated before. Please use TranslateComponent() before RetranslateComponent().');
-  end
-  else
-  begin
-    //*** if param ReReadMoFileOnSameLanguage is set, use the ReTranslate
-    //    function nevertheless if the current language is the same like the
-    //    new (-> reread the current .mo-file from the file system).
-    if ReReadMoFileOnSameLanguage or
-       (comp.LastLanguage <> curlang) then
-    begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('The retranslator is being executed.');
-      {$endif}
-      comp.Retranslator.Execute;
-    end
-    else
-    begin
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('The language has not changed. The retranslator is not executed.');
-      {$endif}
-    end;
-  end;
-  comp.LastLanguage:=curlang;
-
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('======================================================================');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TP_IgnoreClass(IgnClass: TClass);
-var
-  cm:TClassMode;
-  i:integer;
-begin
-  for i:=0 to TP_ClassHandling.Count-1 do begin
-    cm:=TObject(TP_ClassHandling.Items[i]) as TClassMode;
-    if cm.HClass=IgnClass then
-      raise EGGProgrammingError.Create ('You cannot add a class to the ignore list that is already on that list: '+IgnClass.ClassName+'.');
-    if IgnClass.InheritsFrom(cm.HClass) then begin
-      // This is the place to insert this class
-      cm:=TClassMode.Create;
-      cm.HClass:=IgnClass;
-      TP_ClassHandling.Insert(i,cm);
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Locally, class '+IgnClass.ClassName+' is being ignored.');
-      {$endif}
-      exit;
-    end;
-  end;
-  cm:=TClassMode.Create;
-  cm.HClass:=IgnClass;
-  TP_ClassHandling.Add(cm);
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Locally, class '+IgnClass.ClassName+' is being ignored.');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TP_IgnoreClassProperty(IgnClass: TClass;
-  propertyname: ComponentNameString);
-var
-  cm:TClassMode;
-  i:integer;
-begin
-  propertyname:=uppercase(propertyname);
-  for i:=0 to TP_ClassHandling.Count-1 do begin
-    cm:=TObject(TP_ClassHandling.Items[i]) as TClassMode;
-    if cm.HClass=IgnClass then begin
-      if Assigned(cm.SpecialHandler) then
-        raise EGGProgrammingError.Create ('You cannot ignore a class property for a class that has a handler set.');
-      cm.PropertiesToIgnore.Add(propertyname);
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Globally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.');
-      {$endif}
-      exit;
-    end;
-    if IgnClass.InheritsFrom(cm.HClass) then begin
-      // This is the place to insert this class
-      cm:=TClassMode.Create;
-      cm.HClass:=IgnClass;
-      cm.PropertiesToIgnore.Add(propertyname);
-      TP_ClassHandling.Insert(i,cm);
-      {$ifdef DXGETTEXTDEBUG}
-      DebugWriteln ('Locally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.');
-      {$endif}
-      exit;
-    end;
-  end;
-  cm:=TClassMode.Create;
-  cm.HClass:=IgnClass;
-  cm.PropertiesToIgnore.Add(propertyname);
-  TP_GlobalClassHandling.Add(cm);
-  {$ifdef DXGETTEXTDEBUG}
-  DebugWriteln ('Locally, the '+propertyname+' property of class '+IgnClass.ClassName+' is being ignored.');
-  {$endif}
-end;
-
-procedure TGnuGettextInstance.TP_Remember(AnObject: TObject;
-  PropName: ComponentNameString; OldValue: TranslatedUnicodeString);
-begin
-  if Assigned(TP_Retranslator) then
-    (TP_Retranslator as TTP_Retranslator).Remember(AnObject, PropName, OldValue)
-  else
-    raise EGGProgrammingError.Create ('You can only call TP_Remember when doing the initial translation (TP_Retranslator is not set).');
-end;
-
-procedure TGnuGettextInstance.FreeTP_ClassHandlingItems;
-begin
-  while TP_ClassHandling.Count<>0 do begin
-    TObject(TP_ClassHandling.Items[0]).Free;
-    TP_ClassHandling.Delete(0);
-  end;
-end;
-
-{$ifndef UNICODE}
-function TGnuGettextInstance.ansi2wideDTCP(const s: ansistring): MsgIdString;
-{$ifdef MSWindows}
-var
-  len:integer;
-{$endif}
-begin
-{$ifdef MSWindows}
-  if DesignTimeCodePage=CP_ACP then begin
-    // No design-time codepage specified. Using runtime codepage instead.
-{$endif}
-    Result:=s;
-{$ifdef MSWindows}
-  end else begin
-    len:=length(s);
-    if len=0 then
-      Result:=''
-    else begin
-      SetLength (Result,len);
-      len:=MultiByteToWideChar(DesignTimeCodePage,0,pansichar(s),len,pwidechar(Result),len);
-      if len=0 then
-        raise EGGAnsi2WideConvError.Create ('Cannot convert string to widestring:'+sLineBreak+s);
-      SetLength (Result,len);
-    end;
-  end;
-{$endif}
-end;
-{$endif}
-
-{$ifndef UNICODE}
-function TGnuGettextInstance.dngettext(const szDomain: DomainString; const singular,
-  plural: ansistring; Number: Integer): TranslatedUnicodeString;
-begin
-  Result:=dngettext (szDomain, ansi2wideDTCP(singular), ansi2wideDTCP(plural), Number);
-end;
-{$endif}
-
-{ TClassMode }
-
-constructor TClassMode.Create;
-begin
-  PropertiesToIgnore:=TStringList.Create;
-  PropertiesToIgnore.Sorted:=True;
-  PropertiesToIgnore.Duplicates:=dupError;
-  PropertiesToIgnore.CaseSensitive:=False;
-end;
-
-destructor TClassMode.Destroy;
-begin
-  FreeAndNil (PropertiesToIgnore);
-  inherited;
-end;
-
-{ TFileLocator }
-
-function TFileLocator.FindSignaturePos(const signature: RawByteString;
-  str: TFileStream): Int64;
-// Finds the position of signature in the file.
-const
-  bufsize=100000;
-var
-  a:RawByteString;
-  b:RawByteString;
-  offset:integer;
-  rd,p:Integer;
-begin
-  if signature='' then
-  begin
-    Result := 0;
-    Exit;
-  end;
-
-  offset:=0;
-  str.Seek(0, soFromBeginning);
-
-  SetLength (a, bufsize);
-  SetLength (b, bufsize);
-  str.ReadBuffer(a[1],bufsize);
-
-  while true do begin
-    rd:=str.Read(b[1],bufsize);
-    p:=pos(signature,a+b);
-    if (p<>0) then begin // do not check p < bufsize+100 here!
-      Result:=offset+p-1;
-      exit;
-    end;
-    if rd<>bufsize then begin
-      // Prematurely ended without finding anything
-      Result:=0;
-      exit;
-    end;
-    a:=b;
-    offset:=offset+bufsize;
-  end;
-{$IF CompilerVersion<34}
-  // this causes a hint in Delphi 10.4 and newer
-  Result:=0;
-{$IFEND}
-end;
-
-procedure TFileLocator.Analyze;
-var
-  HeaderSize,
-  PrefixSize: Integer;
-  dummysig,
-  headerpre,
-  headerbeg,
-  headerend:RawByteString;
-  i:integer;
-  headerbeginpos,
-  headerendpos:integer;
-  offset,
-  tableoffset:int64;
-  fs:TFileStream;
-  fi:TEmbeddedFileInfo;
-  filename:FilenameString;
-  filename8bit:RawByteString;
-const
-  // DetectionSignature: used solely to detect gnugettext usage by assemble
-  DetectionSignature: array[0..35] of AnsiChar='2E23E563-31FA-4C24-B7B3-90BE720C6B1A';
-  // Embedded Header Begin Signature (without dynamic prefix written by assemble)
-  BeginHeaderSignature: array[0..35] of AnsiChar='BD7F1BE4-9FCF-4E3A-ABA7-3443D11AB362';
-  // Embedded Header End Signature (without dynamic prefix written by assemble)
-  EndHeaderSignature: array[0..35] of AnsiChar='1C58841C-D8A0-4457-BF54-D8315D4CF49D';
-  // Assemble Prefix (do not put before the Header Signatures!)
-  SignaturePrefix: array[0..2] of AnsiChar='DXG'; // written from assemble
-begin
-  // Attn: Ensure all Signatures have the same size!
-  HeaderSize := High(BeginHeaderSignature) - Low(BeginHeaderSignature) + 1;
-  PrefixSize := High(SignaturePrefix) - Low(SignaturePrefix) + 1;
-
-  // dummy usage of DetectionSignature (otherwise not compiled into exe)
-  SetLength(dummysig, HeaderSize);
-  for i := 0 to HeaderSize-1 do
-    dummysig[i+1] := DetectionSignature[i];
-
-  // copy byte by byte (D2009+ compatible)
-  SetLength(headerpre, PrefixSize);
-  for i:= 0 to PrefixSize-1 do
-    headerpre[i+1] := SignaturePrefix[i];
-
-  SetLength(headerbeg, HeaderSize);
-  for i:= 0 to HeaderSize-1 do
-    headerbeg[i+1] := BeginHeaderSignature[i];
-
-  SetLength(headerend, HeaderSize);
-  for i:= 0 to HeaderSize-1 do
-    headerend[i+1] := EndHeaderSignature[i];
-
-  BaseDirectory:=ExtractFilePath(ExecutableFilename);
-  try
-    fs:=TFileStream.Create(ExecutableFilename,fmOpenRead or fmShareDenyNone);
-    try
-      // try to find new header begin and end signatures
-      headerbeginpos := FindSignaturePos(headerpre+headerbeg, fs);
-      headerendpos := FindSignaturePos(headerpre+headerend, fs);
-
-      if (headerbeginpos > 0) and (headerendpos > 0) then
-      begin
-        // adjust positions (to the end of each signature)
-        headerbeginpos := headerbeginpos + HeaderSize + PrefixSize;
-
-        // get file table offset (8 byte, stored directly before the end header)
-        fs.Seek(headerendpos - 8, soFromBeginning);
-        // get relative offset and convert to absolute offset during runtime
-        tableoffset := headerbeginpos + ReadInt64(fs);
-
-        // go to beginning of embedded block
-        fs.Seek(headerbeginpos, soFromBeginning);
-
-        offset := tableoffset;
-        Assert(sizeof(offset)=8);
-        while (true) and (fs.Position<headerendpos) do begin
-          fs.Position := offset;
-          offset:=ReadInt64(fs);
-          if offset=0 then
-            exit;
-          offset:=headerbeginpos+offset;
-          fi:=TEmbeddedFileInfo.Create;
-          try
-            // get embedded file info (adjusting dynamic to real offsets now)
-            fi.Offset:=headerbeginpos+ReadInt64(fs);
-            fi.Size:=ReadInt64(fs);
-            SetLength (filename8bit, offset-fs.position);
-            fs.ReadBuffer (filename8bit[1], offset-fs.position);
-            filename:=trim(utf8decode(filename8bit));
-            if PreferExternal and sysutils.fileexists(basedirectory+filename) then begin
-              // Disregard the internal version and use the external version instead
-              FreeAndNil (fi);
-            end else
-              filelist.AddObject(filename,fi);
-          except
-            FreeAndNil (fi);
-            raise;
-          end;
-        end;
-      end;
-    finally
-      FreeAndNil (fs);
-    end;
-  except
-    {$ifdef DXGETTEXTDEBUG}
-    raise;
-    {$endif}
-  end;
-end;
-
-constructor TFileLocator.Create;
-begin
-  MoFilesCS:=TMultiReadExclusiveWriteSynchronizer.Create;
-
-  MoFiles:=TStringList.Create;
-  MoFiles.Sorted:=True;
-  MoFiles.Duplicates:=dupError;
-  MoFiles.CaseSensitive:=False;
-
-  filelist:=TStringList.Create;
-  filelist.Duplicates:=dupError;
-  { TODO : what if it's neither LINUX nor MSWINDOWS? }
-  {$ifdef LINUX}
-  filelist.CaseSensitive:=True;
-  {$endif}
-  {$ifdef MSWINDOWS}
-  filelist.CaseSensitive:=False;
-  {$endif}
-  filelist.Sorted:=True;
-
-  {$IFDEF dx_SupportsResources}
-  FResourceList := TStringList.Create;
-  FResourceList.Duplicates := dupError;
-  FResourceList.CaseSensitive := False;
-  FResourceList.Sorted := True;
-{$ENDIF dx_SupportsResources}
-end;
-
-destructor TFileLocator.Destroy;
-var
-  Idx: integer;
-begin
-{$IFDEF dx_SupportsResources}
-  if Assigned(FResourceList) then begin
-    while FResourceList.Count > 0 do begin
-      Idx := FResourceList.Count - 1;
-      FResourceList.Objects[Idx].Free;
-      FResourceList.Delete(Idx);
-    end;
-    FreeAndNil(FResourceList);
-  end;
-{$ENDIF dx_SupportsResources}
-
-  for Idx := 0 to filelist.Count-1  do
-    FileList.Objects[Idx].Free;
-  FreeAndNil (filelist);
-
-  FreeAndNil (MoFiles);
-  FreeAndNil (MoFilesCS);
-  inherited;
-end;
-
-function TFileLocator.FileExists(filename: FilenameString): boolean;
-var
-  idx:integer;
-{$IFDEF dx_SupportsResources}
-  ResName: string;
-  HResInfo: HRSRC;
-{$ENDIF dx_SupportsResources}
-begin
-  if LeftStr(filename,length(basedirectory))=basedirectory then begin
-    // Cut off basedirectory if the file is located beneath that base directory
-    filename:=MidStr(filename,length(basedirectory)+1,maxint);
-  end;
-  Result:=filelist.Find(filename,idx);
-
-{$IFDEF dx_SupportsResources}
-  if not Result then begin
-    Result := FResourceList.Find(filename, Idx);
-    if not Result then begin
-      ResName := UpperCase(filename);
-      ResName := StringReplace(ResName,  '/', '_', [rfReplaceAll]);
-      ResName := StringReplace(ResName,  '\', '_', [rfReplaceAll]);
-      ResName := StringReplace(ResName, '_LC_MESSAGES_', '_', [rfReplaceAll]);
-      ResName := StringReplace(ResName, '.MO', '', [rfReplaceAll]);
-      HResInfo := FindResource(hInstance, PChar(ResName), RT_RCDATA);
-      Result := (HResInfo <> 0);
-      if Result then
-        FResourceList.AddObject(filename, TResourceFileInfo.Create(ResName));
-    end;
-  end;
-{$ENDIF dx_SupportsResources}
-end;
-
-function TFileLocator.GetMoFile(filename: FilenameString; DebugLogger:TDebugLogger): TMoFile;
-var
-  fi:TEmbeddedFileInfo;
-  idx:integer;
-  idxname:FilenameString;
-  Offset, Size: Int64;
-  realfilename:FilenameString;
-  ResName: string;
-begin
-  // Find real filename
-  offset:=0;
-  size:=0;
-  Resname := '';
-  realfilename:=filename;
-  if LeftStr(filename,length(basedirectory))=basedirectory then begin
-    filename:=MidStr(filename,length(basedirectory)+1,maxint);
-    idx:=filelist.IndexOf(filename);
-    if idx<>-1 then begin
-      fi:=filelist.Objects[idx] as TEmbeddedFileInfo;
-      realfilename:=ExecutableFilename;
-      offset:=fi.offset;
-      size:=fi.size;
-      {$ifdef DXGETTEXTDEBUG}
-      DebugLogger ('Instead of '+filename+', using '+realfilename+' from offset '+IntTostr(offset)+', size '+IntToStr(size));
-      {$endif}
-    end
-{$IFDEF dx_SupportsResources}
-    else begin
-      Idx := FResourceList.IndexOf(filename);
-      if Idx <> -1 then begin
-        realfilename := ExecutableFilename;
-        ResName := (FResourceList.Objects[Idx] as TResourceFileInfo).ResourceName;
-  {$ifdef DXGETTEXTDEBUG}
-      DebugLogger ('Instead of '+filename+', using resource '+ResName+' from '+realfilename);
-  {$endif}
-      end;
-    end;
-{$ENDIF dx_SupportsResources}
-  end;
-
-
-  {$ifdef DXGETTEXTDEBUG}
-  DebugLogger ('Reading .mo data from file '''+filename+'''');
-  {$endif}
-
-  // Find TMoFile object
-  MoFilesCS.BeginWrite;
-  try
-{$IFDEF dx_SupportsResources}
-    if ResName <> '' then begin
-      idxname := realfilename + ' //\\ ' + ResName;
-    end else
-{$ENDIF dx_SupportsResources}
-      idxname:=realfilename+' //\\ '+IntToStr(offset);
-    if MoFiles.Find(idxname, idx) then begin
-      Result:=MoFiles.Objects[idx] as TMoFile;
-    end else begin
-      Result:=TMoFile.Create (realfilename, Offset, Size, UseMemoryMappedFiles, ResName);
-      MoFiles.AddObject(idxname, Result);
-    end;
-    Inc (Result.Users);
-  finally
-    MoFilesCS.EndWrite;
-  end;
-end;
-
-function TFileLocator.ReadInt64(str: TStream): int64;
-begin
-  Assert (sizeof(Result)=8);
-  str.ReadBuffer(Result,8);
-end;
-
-procedure TFileLocator.ReleaseMoFile(mofile: TMoFile);
-var
-  i:integer;
-begin
-  Assert (mofile<>nil);
-
-  MoFilesCS.BeginWrite;
-  try
-    dec (mofile.Users);
-    if mofile.Users<=0 then begin
-      i:=MoFiles.Count-1;
-      while i>=0 do begin
-        if MoFiles.Objects[i]=mofile then begin
-          MoFiles.Delete(i);
-          FreeAndNil (mofile);
-          break;
-        end;
-        dec (i);
-      end;
-    end;
-  finally
-    MoFilesCS.EndWrite;
-  end;
-end;
-
-{ TTP_Retranslator }
-
-constructor TTP_Retranslator.Create;
-begin
-  list:=TList.Create;
-  KnownRetranslators.Add(Self);
-end;
-
-destructor TTP_Retranslator.Destroy;
-var
-  i:integer;
-begin
-  for i:=0 to list.Count-1 do
-    TObject(list.Items[i]).Free;
-  FreeAndNil (list);
-
-  // some times, we are finalized before the main form's unit
-  if Assigned(KnownRetranslators) then
-    KnownRetranslators.Remove(Self);
-
-  inherited;
-end;
-
-procedure RemoveFromKnowRetranslators(obj: TObject); {$ifdef dx_has_Inline}inline;{$endif}
-var
-  retranslatorIndex:Integer;
-  retranslator:TTP_Retranslator;
-  itemIndex:Integer;
-  item:TTP_RetranslatorItem;
-begin
-  for retranslatorIndex:=0 to KnownRetranslators.Count-1 do
-  begin
-    retranslator:=TTP_Retranslator(KnownRetranslators.List[retranslatorIndex]);
-    itemIndex:=0;
-    while itemIndex<retranslator.list.Count do
-    begin
-      item:=TTP_RetranslatorItem(retranslator.list.List[itemIndex]);
-      if item.obj=obj then
-      begin
-        item.Free;
-        retranslator.list.delete(itemIndex);
-      end
-      else
-      begin
-        inc(itemIndex);
-      end;
-    end;
-  end;
-end;
-
-procedure TTP_Retranslator.Execute;
-var
-  i:integer;
-  sl:TStrings;
-  item:TTP_RetranslatorItem;
-  newvalue:TranslatedUnicodeString;
-  comp:TGnuGettextComponentMarker;
-  ppi:PPropInfo;
-begin
-  for i:=0 to list.Count-1 do begin
-    item:=TObject(list.items[i]) as TTP_RetranslatorItem;
-    if item.obj is TComponent then begin
-      comp:=TComponent(item.obj).FindComponent('GNUgettextMarker') as TGnuGettextComponentMarker;
-      if Assigned(comp) and (self<>comp.Retranslator) then begin
-        comp.Retranslator.Execute;
-        Continue;
-      end;
-    end;
-    if item.obj is TStrings then begin
-      // Since we don't know the order of items in sl, and don't have
-      // the original .Objects[] anywhere, we cannot anticipate anything
-      // about the current sl.Strings[] and sl.Objects[] values. We therefore
-      // have to discard both values. We can, however, set the original .Strings[]
-      // value into the list and retranslate that.
-      sl:=TStringList.Create;
-      try
-        sl.Text:=item.OldValue;
-        Instance.TranslateStrings(sl,textdomain);
-        (item.obj as TStrings).BeginUpdate;
-        try
-          (item.obj as TStrings).Text:=sl.Text;
-        finally
-          (item.obj as TStrings).EndUpdate;
-        end;
-      finally
-        FreeAndNil (sl);
-      end;
-    end else begin
-      if (textdomain = '') or (textdomain = DefaultTextDomain) then
-        newValue := ComponentGettext(item.OldValue, instance)
-      else
-        newValue := instance.dgettext(textdomain,item.OldValue);
-      ppi:=GetPropInfo(item.obj, item.Propname);
-      if ppi<>nil then begin
-        SetWideStrProp(item.obj, ppi, newValue);
-      end else begin
-        {$ifdef DXGETTEXTDEBUG}
-        Instance.DebugWriteln ('ERROR: On retranslation, property disappeared: '+item.Propname+' for object of type '+item.obj.ClassName);
-        {$endif}
-      end;
-    end;
-  end;
-end;
-
-procedure TTP_Retranslator.Remember(obj: TObject; PropName: ComponentNameString;
-  OldValue: TranslatedUnicodeString);
-var
-  item:TTP_RetranslatorItem;
-begin
-  item:=TTP_RetranslatorItem.Create;
-  item.obj:=obj;
-  item.Propname:=Propname;
-  item.OldValue:=OldValue;
-  list.Add(item);
-
-  // As we are storing a reference to an object in our list, we must be notified
-  // when that object is deleted.
-  // The only way to do that for any instance of TObject is to hook into
-  // BeforeDestruction via the virtual method table.
-  HookedObjects.Proxify(obj);
-end;
-
-{ TGnuGettextComponentMarker }
-
-destructor TGnuGettextComponentMarker.Destroy;
-begin
-  FreeAndNil (Retranslator);
-  inherited;
-end;
-
-{ THook }
-
-constructor THook.Create(OldProcedure, NewProcedure: pointer; FollowJump:boolean=false);
-{ Idea and original code from Igor Siticov }
-{ Modified by Jacques Garcia Vazquez and Lars Dybdahl }
-begin
-  {$ifndef CPU386}
-  {$ifndef CPUx64}
-  raise Exception.Create ('This procedure only works on Intel i386 or x64 compatible processors.');
-  {$endif}
-  {$endif}
-
-  oldproc:=OldProcedure;
-  newproc:=NewProcedure;
-
-  Reset (FollowJump);
-end;
-
-destructor THook.Destroy;
-begin
-  Shutdown;
-  inherited;
-end;
-
-procedure THook.Disable;
-begin
-  Assert (PatchPosition<>nil,'Patch position in THook was nil when Disable was called');
-  PatchPosition[0]:=Original[0];
-  PatchPosition[1]:=Original[1];
-  PatchPosition[2]:=Original[2];
-  PatchPosition[3]:=Original[3];
-  PatchPosition[4]:=Original[4];
-end;
-
-procedure THook.Enable;
-begin
-  Assert (PatchPosition<>nil,'Patch position in THook was nil when Enable was called');
-  PatchPosition[0]:=Patch[0];
-  PatchPosition[1]:=Patch[1];
-  PatchPosition[2]:=Patch[2];
-  PatchPosition[3]:=Patch[3];
-  PatchPosition[4]:=Patch[4];
-end;
-
-procedure THook.Reset(FollowJump: boolean);
-var
-  offset:integer;
-  {$ifdef LINUX}
-  p:pointer;
-  pagesize:integer;
-  {$endif}
-  {$ifdef MSWindows}
-  ov: cardinal;
-  {$endif}
-begin
-  if PatchPosition<>nil then
-    Shutdown;
-
-  patchPosition := OldProc;
-  if FollowJump and (Word(OldProc^) = $25FF) then begin
-    // This finds the correct procedure if a virtual jump has been inserted
-    // at the procedure address
-    Inc(patchPosition, 2); // skip the jump
-    {$IFDEF CPUX64}
-    patchPosition := pansiChar(Pointer(patchPosition + 4 + PInteger(patchPosition)^)^);
-    {$ELSE}
-    patchPosition := pansiChar(Pointer(pointer(patchPosition)^)^);
-    {$ENDIF CPUX64}
-  end;
-  offset:=pansiChar(NewProc)-pansiChar(pointer(patchPosition))-5;
-
-  Patch[0] := ansichar($E9);
-  Patch[1] := ansichar(offset and 255);
-  Patch[2] := ansichar((offset shr 8) and 255);
-  Patch[3] := ansichar((offset shr 16) and 255);
-  Patch[4] := ansichar((offset shr 24) and 255);
-
-  Original[0]:=PatchPosition[0];
-  Original[1]:=PatchPosition[1];
-  Original[2]:=PatchPosition[2];
-  Original[3]:=PatchPosition[3];
-  Original[4]:=PatchPosition[4];
-
-  {$ifdef MSWINDOWS}
-  if not VirtualProtect(Pointer(PatchPosition), 5, PAGE_EXECUTE_READWRITE, @ov) then
-    RaiseLastOSError;
-  {$endif}
-  {$ifdef LINUX}
-  pageSize:=sysconf (_SC_PAGE_SIZE);
-  p:=pointer(PatchPosition);
-  p:=pointer((pansichar(p) + PAGESIZE-1) and not (PAGESIZE-1) - pageSize);
-  if mprotect (p, pageSize, PROT_READ + PROT_WRITE + PROT_EXEC) <> 0 then
-    RaiseLastOSError;
-  {$endif}
-end;
-
-procedure THook.Shutdown;
-begin
-  Disable;
-  PatchPosition:=nil;
-end;
-
-procedure HookIntoResourceStrings (enabled:boolean=true; SupportPackages:boolean=false);
-begin
-  HookLoadResString.Reset (SupportPackages);
-  HookLoadStr.Reset (SupportPackages);
-  HookFmtLoadStr.Reset (SupportPackages);
-  if enabled then begin
-    HookLoadResString.Enable;
-    HookLoadStr.Enable;
-    HookFmtLoadStr.Enable;
-  end;
-end;
-
-{ TMoFile }
-
-function TMoFile.autoswap32(i: cardinal): cardinal;
-var
-  cnv1, cnv2:
-    record
-      case integer of
-        0: (arr: array[0..3] of byte);
-        1: (int: cardinal);
-    end;
-begin
-  if doswap then begin
-    cnv1.int := i;
-    cnv2.arr[0] := cnv1.arr[3];
-    cnv2.arr[1] := cnv1.arr[2];
-    cnv2.arr[2] := cnv1.arr[1];
-    cnv2.arr[3] := cnv1.arr[0];
-    Result := cnv2.int;
-  end else
-    Result := i;
-end;
-
-function TMoFile.CardinalInMem(baseptr: PansiChar; Offset: Cardinal): Cardinal;
-var pc:^Cardinal;
-begin
-  inc (baseptr,offset);
-  pc:=Pointer(baseptr);
-  Result:=pc^;
-  if doswap then
-    autoswap32(Result);
-end;
-
-constructor TMoFile.Create(const filename: FilenameString;
-                           const Offset: int64; Size: int64;
-                           const xUseMemoryMappedFiles: Boolean;
-                           const ResName: string);
-var
-  i:cardinal;
-  nn:integer;
-  mofile:TStream;
-begin
-  if sizeof(i) <> 4 then
-    raise EGGProgrammingError.Create('TDomain in gnugettext is written for an architecture that has 32 bit integers.');
-
-  {$ifdef mswindows}
-  FUseMemoryMappedFiles := xUseMemoryMappedFiles;
-  {$endif}
-
-  {$ifdef linux}
-  FUseMemoryMappedFiles := False;
-  {$endif}
-
-{$IFDEF dx_SupportsResources}
-  if ResName <> '' then begin
-    // Read the whole file into memory
-    mofile:=TResourceStream.Create(HInstance, ResName, RT_RCDATA);
-    try
-      size := mofile.Size;
-      Getmem (momemoryHandle, size);
-      momemory := momemoryHandle;
-      mofile.ReadBuffer(momemory^, size);
-    finally
-      FreeAndNil(mofile);
-    end;
-  end else
-{$endif dx_SupportsResources}
-  if FUseMemoryMappedFiles then
-  begin
-    // Map the mo file into memory and let the operating system decide how to cache
-    mo:=createfile (PChar(filename),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
-    if mo=INVALID_HANDLE_VALUE then
-      raise EGGIOError.Create ('Cannot open file '+filename);
-    momapping:=CreateFileMapping (mo, nil, PAGE_READONLY, 0, 0, nil);
-    if momapping=0 then
-      raise EGGIOError.Create ('Cannot create memory map on file '+filename);
-    momemoryHandle:=MapViewOfFile (momapping,FILE_MAP_READ,0,0,0);
-    if momemoryHandle=nil then begin
-      raise EGGIOError.Create ('Cannot map file '+filename+' into memory. Reason: '+GetLastWinError);
-    end;
-    momemory:=momemoryHandle+offset;
-  end
-  else
-  begin
-    // Read the whole file into memory
-    mofile:=TFileStream.Create (filename, fmOpenRead or fmShareDenyNone);
-    try
-      if (size = 0) then
-        size := mofile.Size;
-      Getmem (momemoryHandle, size);
-      momemory := momemoryHandle;
-      mofile.Position := offset;
-      mofile.ReadBuffer(momemory^, size);
-    finally
-      FreeAndNil(mofile);
-    end;
-  end;
-
-  // Check the magic number
-  doswap:=False;
-  i:=CardinalInMem(momemory,0);
-  if (i <> $950412DE) and (i <> $DE120495) then
-    raise EGGIOError.Create('This file is not a valid GNU gettext mo file: ' + filename);
-  doswap := (i = $DE120495);
-
-
-  // Find the positions in the file according to the file format spec
-  CardinalInMem(momemory,4);       // Read the version number, but don't use it for anything.
-  N:=CardinalInMem(momemory,8);    // Get string count
-  O:=CardinalInMem(momemory,12);   // Get offset of original strings
-  T:=CardinalInMem(momemory,16);   // Get offset of translated strings
-
-  // Calculate start conditions for a binary search
-  nn := N;
-  startindex := 1;
-  while nn <> 0 do begin
-    nn := nn shr 1;
-    startindex := startindex shl 1;
-  end;
-  startindex := startindex shr 1;
-  startstep := startindex shr 1;
-end;
-
-destructor TMoFile.Destroy;
-begin
-  if FUseMemoryMappedFiles then
-  begin
-    UnMapViewOfFile (momemoryHandle);
-    CloseHandle (momapping);
-    CloseHandle (mo);
-  end
-  else
-  begin
-    FreeMem (momemoryHandle);
-  end;
-
-  inherited;
-end;
-
-function TMoFile.gettext(const msgid: RawUtf8String;var found:boolean): RawUtf8String;
-var
-  i, step: cardinal;
-  offset, pos: cardinal;
-  CompareResult:integer;
-  msgidptr,a,b:PAnsiChar;
-  abidx:integer;
-  size, msgidsize:integer;
-begin
-  found:=false;
-  msgidptr:=PAnsiChar(msgid);
-  msgidsize:=length(msgid);
-
-  // Do binary search
-  i:=startindex;
-  step:=startstep;
-  while true do begin
-    // Get string for index i
-    pos:=O+8*(i-1);
-    offset:=CardinalInMem (momemory,pos+4);
-    size:=CardinalInMem (momemory,pos);
-    a:=msgidptr;
-    b:=momemory+offset;
-    abidx:=size;
-    if msgidsize<abidx then
-      abidx:=msgidsize;
-    CompareResult:=0;
-    while abidx<>0 do begin
-      CompareResult:=integer(byte(a^))-integer(byte(b^));
-      if CompareResult<>0 then
-        break;
-      dec (abidx);
-      inc (a);
-      inc (b);
-    end;
-    if CompareResult=0 then
-      CompareResult:=msgidsize-size;
-    if CompareResult=0 then begin  // msgid=s
-      // Found the msgid
-      pos:=T+8*(i-1);
-      offset:=CardinalInMem (momemory,pos+4);
-      size:=CardinalInMem (momemory,pos);
-      SetString (Result,momemory+offset,size);
-      found:=True;
-      break;
-    end;
-    if step=0 then begin
-      // Not found
-      Result:=msgid;
-      break;
-    end;
-    if CompareResult<0 then begin  // msgid<s
-      if i < 1+step then
-        i := 1
-      else
-        i := i - step;
-      step := step shr 1;
-    end else begin  // msgid>s
-      i := i + step;
-      if i > N then
-        i := N;
-      step := step shr 1;
-    end;
-  end;
-end;
-
-{ THookedObjects }
-
-function getClassData(aClass:TClass):PProxyClassData; overload; {$ifdef dx_has_Inline}inline;{$endif}
-begin
-  Result:=PProxyClassData((PAnsiChar(aClass) + vmtSelfPtr));
-end;
-
-function getClassData(obj:TObject):PProxyClassData; overload; {$ifdef dx_has_Inline}inline;{$endif}
-begin
-  Result:=getClassData(obj.ClassType);
-end;
-
-function GetBeforeDestructionVmtAddress(AClass: TClass): PPointer; overload;
-asm
-  {$IFDEF CPU386}
-  lea eax, eax + VMTOFFSET TObject.BeforeDestruction
-  {$ENDIF CPU386}
-  {$IFDEF CPUx64}
-  lea rax, rcx + VMTOFFSET TObject.BeforeDestruction
-  {$ENDIF CPUx64}
-end;
-
-procedure THookedObjects.BeforeDestructionHook;
-type
-  TOriginalBeforeDestruction = procedure of object;
-var
-  method:TMethod;
-begin
-  // NOTE: this method is declared inside THookedObjects to have access
-  // to Self, but because it is used as a hook for other classes' BeforeDestruction,
-  // Self will not be an instance of THookedObjects but one of the hooked class.
-
-  // remove ourselves from known retranslators
-  RemoveFromKnowRetranslators(Self);
-
-  // call the inherited BeforeDestruction
-  // we must do it via the parent class type because simply writing
-  // inherited BeforeDestruction will be resolved at compile time to
-  // TObject.BeforeDestruction which is not what we want
-  method.Code:=GetBeforeDestructionVmtAddress(getClassData(ClassType)^.Parent^)^;
-  method.Data:=Self;
-  TOriginalBeforeDestruction(method);
-
-  // Remove from hooked objects (Remember, Self is not a THookedObjects instance)
-  HookedObjects.Remove(Self);
-end;
-
-constructor THookedObjects.Create;
-begin
-  inherited Create;
-
-  interceptorClassDatas:=TList.Create;
-end;
-
-destructor THookedObjects.Destroy;
-var
-  i:Integer;
-begin
-  for i:=0 to Count-1 do
-    Unproxify(TObject(Items[i]));
-
-  for i:=0 to interceptorClassDatas.Count-1 do
-    FreeMem(interceptorClassDatas[i]);
-  interceptorClassDatas.Free;
-
-  inherited Destroy;
-end;
-
-function THookedObjects.GetBeforeDestructionHookAddress: Pointer;
-type
-  TBeforeDestructionHook=procedure of object;
-var
-  m:TBeforeDestructionHook;
-begin
-  m:=BeforeDestructionHook;
-  Result:=TMethod(m).Code;
-end;
-
-function THookedObjects.findInterceptorClassData(aClass:TClass):Pointer;
-var
-  i:Integer;
-  proxyClassData:Pointer;
-begin
-  i:=0;
-  Result:=nil;
-  while (i<interceptorClassDatas.Count) and (Result=nil) do
-  begin
-    proxyClassData:=interceptorClassDatas[i];
-    if (PProxyClassData(proxyClassData)^.Parent^=aClass) or (PProxyClassData(proxyClassData)^.SelfPtr=aClass) then
-      Result:=proxyClassData;
-
-    Inc(i);
-  end;
-end;
-
-{$ifdef dx_has_VclThemes}
-type
-  TCustomStyleEngineAccess=
-    class(TCustomStyleEngine)
-    public
-      class property RegisteredStyleHooks;
-    end;
-{$endif dx_has_VclThemes}
-
-procedure THookedObjects.Proxify(obj:TObject);
-const
-  growthCapacity=50;
-var
-  proxyClass:TClass;
-  proxyClassData:Pointer;
-  objClassData:PProxyClassData;
-  size,classOfs:Integer;
-  beforeDestructionVmtAddr:PPointer;
-  hookedClassNameLength:Cardinal;
-begin
-  if IndexOf(obj)<0 then
-  begin
-    classOfs:=-vmtSelfPtr;
-    proxyClassData:=findInterceptorClassData(obj.ClassType);
-    if proxyClassData=nil then
-    begin
-      // According to Allen Bauer, we know that the ClassName is stored right after the
-      // virtual method pointers.
-      // So to figure out the size, we take the difference between the start of the VMT
-      // and the location of ClassName.
-      // See the following link for reference:
-      // http://stackoverflow.com/questions/760513/where-can-i-find-information-on-the-structure-of-the-delphi-vmt
-      objClassData:=getClassData(obj.ClassType);
-      hookedClassNameLength:=Length(objClassData.ClassName^)+3;
-      if hookedClassNameLength>255 then
-        hookedClassNameLength:=255;
-      size:=NativeUInt(objClassData.ClassName)-NativeUInt(objClassData)+hookedClassNameLength+2;
-
-      proxyClassData:=AllocMem(size);
-      interceptorClassDatas.Add(proxyClassData);
-
-      proxyClass:=TClass(PAnsiChar(proxyClassData) + classOfs);
-
-      // Copy everything from the original class data then do the following adjustments:
-      // - Parent points to the address of the original data SelfPtr.
-      // - SelfPtr points to ourselves
-      // - ClassName points at the end of our structure to respect compiler layout (see above)
-      // - ClassName gets a suffix as it helps when debugging
-      System.Move(objClassData^, proxyClassData^, size);
-      PProxyClassData(proxyClassData)^.Parent:=@(objClassData^.SelfPtr);
-      PProxyClassData(proxyClassData)^.SelfPtr:=proxyClass;
-{$IFDEF dx_ChangeProxyClassname}
-      PProxyClassData(proxyClassData)^.ClassName:=PShortString(PAnsiChar(proxyClassData)+size-hookedClassNameLength-2);
-      SetLength(PProxyClassData(proxyClassData)^.ClassName^,hookedClassNameLength);
-      System.Move(AnsiString('!dx'#0),(PAnsiChar(PProxyClassData(proxyClassData)^.ClassName)+hookedClassNameLength+1-3)^,4);
-{$ENDIF}
-
-      // Place our BeforeDestruction virtual method in the metaclass VMT
-      beforeDestructionVmtAddr:=GetBeforeDestructionVmtAddress(proxyClass);
-      beforeDestructionVmtAddr^:=GetBeforeDestructionHookAddress;
-
-      {$ifdef dx_has_VclThemes}
-      // As we replace the metaclass for the object, the style engine will not
-      // know about our new metaclass, and thus we must tell it it exists.
-      if TCustomStyleEngineAccess.RegisteredStyleHooks.ContainsKey(obj.ClassType) and
-         not TCustomStyleEngineAccess.RegisteredStyleHooks.ContainsKey(proxyClass) then
-        TCustomStyleEngine.RegisterStyleHook(proxyClass, TCustomStyleEngineAccess.RegisteredStyleHooks[obj.ClassType].Last);
-      {$endif dx_has_VclThemes}
-    end
-    else
-    begin
-      proxyClass:=TClass(PAnsiChar(proxyClassData) + classOfs);
-    end;
-
-    PPointer(obj)^:=proxyClass;
-    Add(obj);
-  end;
-end;
-
-procedure THookedObjects.Unproxify(obj:TObject);
-begin
-  PPointer(obj)^:=getClassData(obj)^.Parent^;
-end;
-{$ifdef dx_German_Delphi_fix}
-function VclMenusShortCutToText(ShortCut: TShortCut): string;
-{$IfDEF dx_has_StringBuilder}
-var
-  sbShortCut: TStringBuilder;
-begin
-  HookShortCutToText.Disable;
-  try
-    // Call original function to get shortcut
-{$IFDEF dx_has_dotted_unitnames}
-    Result := Vcl.Menus.ShortCutToText(ShortCut);
-{$ELSE ~dx_has_dotted_unitnames}
-    Result := Menus.ShortCutToText(ShortCut);
-{$ENDIF dx_has_dotted_unitnames}
-
-    // Shortcuts are in German by default, so
-    // if currently used language is not German: replace the German names by English names
-    if not SameText(GetCurrentLanguageCode, 'de') then
-      begin
-        // Use a Stringbuilder as it is way more performant in replace operations than StringReplace
-        sbShortCut := TStringBuilder.Create(Result);
-        try
-          // Replace German shortcut names
-{$IFDEF dx_has_dotted_unitnames}
-          sbShortCut.
-            Replace(Vcl.Consts.SmkcBkSp, 'BkSp'). // 'Rueck'
-            Replace(Vcl.Consts.SmkcEnter, 'Enter'). // 'Eingabe'
-            Replace(Vcl.Consts.SmkcSpace, 'Space'). // 'Leer'
-            Replace(Vcl.Consts.SmkcPgUp, 'PgUp'). // 'BildAuf'
-            Replace(Vcl.Consts.SmkcPgDn, 'PgDn'). // 'BildAb'
-            Replace(Vcl.Consts.SmkcEnd, 'End'). // 'Ende'
-            Replace(Vcl.Consts.SmkcHome, 'Home'). // 'Pos1'
-            Replace(Vcl.Consts.SmkcLeft, 'Left'). // 'Links'
-            Replace(Vcl.Consts.SmkcUp, 'Up'). // 'Auf'
-            Replace(Vcl.Consts.SmkcRight, 'Right'). // 'Rechts'
-            Replace(Vcl.Consts.SmkcDown, 'Down'). // 'Ab'
-            Replace(Vcl.Consts.SmkcIns, 'Ins'). // 'Einfg'
-            Replace(Vcl.Consts.SmkcDel, 'Del'). // 'Entf'
-            Replace(Vcl.Consts.SmkcShift, 'Shift+'). // 'Umsch+'
-            Replace(Vcl.Consts.SmkcCtrl, 'Ctrl+'); // 'Strg+'
-{$ELSE ~dx_has_dotted_unitnames}
-          sbShortCut.
-            Replace(Consts.SmkcBkSp, 'BkSp'). // 'Rueck'
-            Replace(Consts.SmkcEnter, 'Enter'). // 'Eingabe'
-            Replace(Consts.SmkcSpace, 'Space'). // 'Leer'
-            Replace(Consts.SmkcPgUp, 'PgUp'). // 'BildAuf'
-            Replace(Consts.SmkcPgDn, 'PgDn'). // 'BildAb'
-            Replace(Consts.SmkcEnd, 'End'). // 'Ende'
-            Replace(Consts.SmkcHome, 'Home'). // 'Pos1'
-            Replace(Consts.SmkcLeft, 'Left'). // 'Links'
-            Replace(Consts.SmkcUp, 'Up'). // 'Auf'
-            Replace(Consts.SmkcRight, 'Right'). // 'Rechts'
-            Replace(Consts.SmkcDown, 'Down'). // 'Ab'
-            Replace(Consts.SmkcIns, 'Ins'). // 'Einfg'
-            Replace(Consts.SmkcDel, 'Del'). // 'Entf'
-            Replace(Consts.SmkcShift, 'Shift+'). // 'Umsch+'
-            Replace(Consts.SmkcCtrl, 'Ctrl+'); // 'Strg+'
-{$ENDIF dx_has_dotted_unitnames}
-          Result := sbShortCut.ToString;
-        finally
-          sbShortCut.Free;
-        end;
-      end;
-  finally
-    HookShortCutToText.Enable;
-  end;
-end;
-{$ELSE ~ dx_has_StringBuilder}
-begin
-  HookShortCutToText.Disable;
-  try
-    // Call original function to get shortcut
-    Result := Menus.ShortCutToText(ShortCut);
-
-    // Shortcuts are in German by default, so
-    // if currently used language is not German: replace the German names by English names
-    if not SameText(GetCurrentLanguageCode, 'de') then
-      begin
-        Result := StringReplace(Result, Consts.SmkcBkSp, 'BkSp', []); // 'Rueck'
-        Result := StringReplace(Result, Consts.SmkcEnter, 'Enter', []); // 'Eingabe'
-        Result := StringReplace(Result, Consts.SmkcSpace, 'Space', []); // 'Leer'
-        Result := StringReplace(Result, Consts.SmkcPgUp, 'PgUp', []); // 'BildAuf'
-        Result := StringReplace(Result, Consts.SmkcPgDn, 'PgDn', []); // 'BildAb'
-        Result := StringReplace(Result, Consts.SmkcEnd, 'End', []); // 'Ende'
-        Result := StringReplace(Result, Consts.SmkcHome, 'Home', []); // 'Pos1'
-        Result := StringReplace(Result, Consts.SmkcLeft, 'Left', []); // 'Links'
-        Result := StringReplace(Result, Consts.SmkcUp, 'Up', []); // 'Auf'
-        Result := StringReplace(Result, Consts.SmkcRight, 'Right', []); // 'Rechts'
-        Result := StringReplace(Result, Consts.SmkcDown, 'Down', []); // 'Ab'
-        Result := StringReplace(Result, Consts.SmkcIns, 'Ins', []); // 'Einfg'
-        Result := StringReplace(Result, Consts.SmkcDel, 'Del', []); // 'Entf'
-        Result := StringReplace(Result, Consts.SmkcShift, 'Shift+', []); // 'Umsch+'
-        Result := StringReplace(Result, Consts.SmkcCtrl, 'Ctrl+', []); // 'Strg+'
-      end;
-  finally
-    HookShortCutToText.Enable;
-  end;
-end;
-{$ENDIF dx_has_StringBuilder}
-{$endif dx_German_Delphi_fix}
-
-{$IFDEF dx_SupportsResources}
-{ TResourceFileInfo }
-
-constructor TResourceFileInfo.Create(const _ResourceName: string);
-begin
-  inherited Create;
-  ResourceName := _ResourceName;
-end;
-{$ENDIF dx_SupportsResources}
-
-var
-  param0:string;
-
-initialization
-  {$ifdef DXGETTEXTDEBUG}
-  {$ifdef MSWINDOWS}
-  MessageBox (0,'gnugettext.pas debugging is enabled. Turn it off before releasing this piece of software.','Information',MB_OK);
-  {$endif}
-  {$ifdef LINUX}
-  writeln (stderr,'gnugettext.pas debugging is enabled. Turn it off before releasing this piece of software.');
-  {$endif}
-  {$endif}
-  {$ifdef FPC}
-    {$ifdef LINUX}
-      SetLocale(LC_ALL, '');
-      SetCWidestringManager;
-    {$endif LINUX}
-  {$endif FPC}
-  // Get DLL/shared object filename
-  SetLength(ExecutableFilename, 300); // MAX_PATH ?
-  {$ifdef MSWINDOWS}
-  SetLength(ExecutableFilename, GetModuleFileName(HInstance,
-    PChar(ExecutableFilename), Length(ExecutableFilename)));
-  {$endif}
-  {$ifdef LINUX}
-  if ModuleIsLib or ModuleIsPackage then
-  begin
-    // This line has not been tested on Linux, yet, but should work.
-    SetLength(ExecutableFilename, GetModuleFileName(0, PChar(ExecutableFilename),
-      Length(ExecutableFilename)));
-  end else
-    ExecutableFilename:=Paramstr(0);
-  {$endif}
-  FileLocator:=TFileLocator.Create;
-  FileLocator.Analyze;
-  ResourceStringDomainList:=TStringList.Create;
-  ResourceStringDomainList.Add(DefaultTextDomain);
-  ResourceStringDomainListCS:=TMultiReadExclusiveWriteSynchronizer.Create;
-  ComponentDomainList:=TStringList.Create;
-  ComponentDomainList.Add(DefaultTextDomain);
-  ComponentDomainListCS:=TMultiReadExclusiveWriteSynchronizer.Create;
-  DefaultInstance:=TGnuGettextInstance.Create;
-  {$ifdef MSWINDOWS}
-  Win32PlatformIsUnicode := (Win32Platform = VER_PLATFORM_WIN32_NT);
-  {$endif}
-
-  // replace Borlands LoadResString with gettext enabled version:
-  {$ifdef UNICODE}
-  HookLoadResString:=THook.Create (@system.LoadResString, @LoadResStringW);
-  {$else}
-  HookLoadResString:=THook.Create (@system.LoadResString, @LoadResStringA);
-  {$endif}
-  HookLoadStr:=THook.Create (@sysutils.LoadStr, @SysUtilsLoadStr);
-  HookFmtLoadStr:=THook.Create (@sysutils.FmtLoadStr, @SysUtilsFmtLoadStr);
-{$ifdef dx_German_Delphi_fix}
-  // Create hook for Vcl.Menus.ShortCutToText to translate shortcut strings.
-{$IFDEF dx_has_dotted_unitnames}
-  HookShortCutToText := THook.Create(@Vcl.Menus.ShortCutToText, @VclMenusShortCutToText);
-{$ELSE ~dx_has_dotted_unitnames}
-  HookShortCutToText := THook.Create(@Menus.ShortCutToText, @VclMenusShortCutToText);
-{$ENDIF dx_has_dotted_unitnames}
-{$endif dx_German_Delphi_fix}
-  param0:=lowercase(extractfilename(paramstr(0)));
-  if (param0<>'delphi32.exe') and (param0<>'kylix') and (param0<>'bds.exe') then
-    begin
-      HookIntoResourceStrings (AutoCreateHooks,false);
-{$ifdef dx_German_Delphi_fix}
-      HookShortCutToText.Enable;
-{$endif dx_German_Delphi_fix}
-    end;
-  param0:='';
-
-  HookedObjects:=THookedObjects.Create;
-  KnownRetranslators:=TList.Create;
-
-finalization
-  FreeAndNil (DefaultInstance);
-  FreeAndNil (ResourceStringDomainListCS);
-  FreeAndNil (ResourceStringDomainList);
-  FreeAndNil (ComponentDomainListCS);
-  FreeAndNil (ComponentDomainList);
-  FreeAndNil (HookFmtLoadStr);
-  FreeAndNil (HookLoadStr);
-  FreeAndNil (HookLoadResString);
-  FreeAndNil (FileLocator);
-  FreeAndNil (HookedObjects);
-  FreeAndNil (KnownRetranslators);
-{$ifdef dx_German_Delphi_fix}
-  FreeAndNil (HookShortCutToText);
-{$endif dx_German_Delphi_fix}
-
-end.
-

+ 2 - 4
Examples/AdvDemos/GLSViewer/Source/uGlobals.pas

@@ -21,15 +21,13 @@ var
   TexturePath: TFileName;
   IniFile: TIniFile;
 
-  Language: integer;
+  LanguageID: integer;
   GeneralSection: string = RegGLSViewer + 'General';
 
   SplashStart : Boolean;
   TipOfTheDay : Boolean;
 
 
-//==========================================================================
-implementation
-//==========================================================================
+implementation //===========================================================
 
 end.

+ 5 - 7
Examples/AdvDemos/GLSViewer/Source/uSettings.pas

@@ -13,15 +13,11 @@ uses
   System.SysUtils,
   Vcl.Forms,
   Vcl.Graphics,
-  Vcl.ActnList,
-  //
-  GnuGettext;
+  Vcl.ActnList;
 
 procedure InitGeneralRegistry;
 
-//-------------------------------------------------------------------------
-implementation
-// ------------------------------------------------------------------------
+implementation // ----------------------------------------------------------
 
 uses
   uGlobals;
@@ -65,6 +61,8 @@ begin
 *)
 end;
 
-initialization
+initialization //-----------------------------------------------------------
+
   InitGeneralRegistry;
+
 end.

+ 0 - 23
Examples/AdvDemos/GLSViewer/_getpo_ru.cmd

@@ -1,23 +0,0 @@
-rem @echo off
-cls
-
-set LANG=C
-
-dxgettext -b source --delphi --useignorepo -r
-
-pushd locale\ru\LC_MESSAGES
-copy default.po default-backup.po
-ren default.po default-old.po
-
-echo Merging
-msgmergedx default-old.po ..\..\..\default.po -o default.po
-del default-old.po
-del default-backup.po
-
-copy default.po glsviewer.po
-popd
-
-del default.po
-
-pause
-

+ 0 - 1
Externals/Luxophia/include/#include.txt

@@ -1 +0,0 @@
-Directory for include files

+ 0 - 1
Externals/Luxophia/lib/#libs.txt

@@ -1 +0,0 @@
-Directory for bpi/lib files

+ 0 - 2
Packages/GLScene_RT.dpk

@@ -245,8 +245,6 @@ contains
   GLS.VerletTypes in '..\Source\GLS.VerletTypes.pas',
   GLS.VerletClothify in '..\Source\GLS.VerletClothify.pas',
   GLS.OpenGLAdapter in '..\Source\GLS.OpenGLAdapter.pas',
-  gnuGettext in '..\Src\gnuGettext.pas',
-  gnuGettextInit in '..\Src\gnuGettextInit.pas',
   GLS.CurvesAndSurfaces in '..\Source\GLS.CurvesAndSurfaces.pas',
   PasDblStrUtils in '..\Src\PasDblStrUtils.pas',
   PasGLTF in '..\Src\PasGLTF.pas',

+ 0 - 2
Packages/GLScene_RT.dproj

@@ -380,8 +380,6 @@
         <DCCReference Include="..\Source\GLS.VerletTypes.pas"/>
         <DCCReference Include="..\Source\GLS.VerletClothify.pas"/>
         <DCCReference Include="..\Source\GLS.OpenGLAdapter.pas"/>
-        <DCCReference Include="..\Src\gnuGettext.pas"/>
-        <DCCReference Include="..\Src\gnuGettextInit.pas"/>
         <DCCReference Include="..\Source\GLS.CurvesAndSurfaces.pas"/>
         <DCCReference Include="..\Src\PasDblStrUtils.pas"/>
         <DCCReference Include="..\Src\PasGLTF.pas"/>

+ 0 - 3913
Src/gnuGettext.pas

@@ -1,3913 +0,0 @@
-{ *------------------------------------------------------------------------------
-  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
-  ------------------------------------------------------------------------------- }
-unit gnugettext;
-(* ************************************************************ *)
-(* *)
-(* (C) Copyright by Lars B. Dybdahl and others *)
-(* E-mail: [email protected], phone +45 70201241 *)
-(* *)
-(* Contributors: Peter Thornqvist, Troy Wolbrink, *)
-(* Frank Andreas de Groot, Igor Siticov, *)
-(* Jacques Garcia Vazquez, Igor Gitman, *)
-(* Arvid Winkelsdorf *)
-(* *)
-(* See http://dybdahl.dk/dxgettext/ for more information *)
-(* *)
-(* ************************************************************ *)
-
-// 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
-// GetWindowsLanguage uses GetUserPreferredUILanguages (Sept. 2023)
-
-// Information about this file:
-// $LastChangedDate: 2024-08-24 $
-
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// The names of any contributor may not be used to endorse or promote
-// products derived from this software without specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
-// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
-// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-interface
-
-// If the conditional define DXGETTEXTDEBUG is defined, debugging log is activated.
-// Use DefaultInstance.DebugLogToFile() to write the log to a file.
-{ $define DXGETTEXTDEBUG }
-
-uses
-{$IFDEF MSWINDOWS}
-  Winapi.Windows,
-{$ELSE}
-  Libc,
-{$IFDEF FPC}
-  CWString,
-{$ENDIF}
-{$ENDIF}
-  System.Classes,
-  System.StrUtils,
-  System.SysUtils,
-  System.TypInfo;
-
-(* *************************************************************************** *)
-(* *)
-(* MAIN API *)
-(* *)
-(* *************************************************************************** *)
-
-type
-{$IFNDEF UNICODE}
-  UnicodeString = WideString;
-  RawUtf8String = AnsiString;
-  RawByteString = AnsiString;
-{$ELSE}
-  RawUtf8String = RawByteString;
-{$ENDIF}
-  DomainString = string;
-  LanguageString = string;
-  ComponentNameString = string;
-  FilenameString = string;
-  MsgIdString = UnicodeString;
-  TranslatedUnicodeString = UnicodeString;
-
-  // Main GNU gettext functions. See documentation for instructions on how to use them.
-function _(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function gettext_NoExtract(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString;
-function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString)
-  : TranslatedUnicodeString;
-function dgettext_NoExtract(const szDomain: DomainString;
-  const szMsgId: MsgIdString): TranslatedUnicodeString;
-function dngettext(const szDomain: DomainString;
-  const singular, plural: MsgIdString; Number: longint)
-  : TranslatedUnicodeString;
-function ngettext(const singular, plural: MsgIdString; Number: longint)
-  : TranslatedUnicodeString;
-function ngettext_NoExtract(const singular, plural: MsgIdString;
-  Number: longint): TranslatedUnicodeString;
-procedure textdomain(const szDomain: DomainString);
-function getcurrenttextdomain: DomainString;
-procedure bindtextdomain(const szDomain: DomainString;
-  const szDirectory: FilenameString);
-
-// Set language to use
-procedure UseLanguage(LanguageCode: LanguageString);
-function GetCurrentLanguage: LanguageString;
-
-// Translates a component (form, frame etc.) to the currently selected language.
-// Put TranslateComponent(self) in the OnCreate event of all your forms.
-// See the manual for documentation on these functions
-type
-  TTranslator = procedure(obj: TObject) of object;
-
-procedure TP_Ignore(AnObject: TObject; const name: ComponentNameString);
-procedure TP_IgnoreClass(IgnClass: TClass);
-procedure TP_IgnoreClassProperty(IgnClass: TClass;
-  const propertyname: ComponentNameString);
-procedure TP_GlobalIgnoreClass(IgnClass: TClass);
-procedure TP_GlobalIgnoreClassProperty(IgnClass: TClass;
-  const propertyname: ComponentNameString);
-procedure TP_GlobalHandleClass(HClass: TClass; Handler: TTranslator);
-procedure TranslateComponent(AnObject: TComponent;
-  const textdomain: DomainString = '');
-procedure RetranslateComponent(AnObject: TComponent;
-  const textdomain: DomainString = '');
-
-// Add more domains that resourcestrings can be extracted from. If a translation
-// is not found in the default domain, this domain will be searched, too.
-// This is useful for adding mo files for certain runtime libraries and 3rd
-// party component libraries
-procedure AddDomainForResourceString(const domain: DomainString);
-procedure RemoveDomainForResourceString(const domain: DomainString);
-procedure AddDomains(const Domains: array of DomainString);
-
-// 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);
-
-// Unicode-enabled way to get resourcestrings, automatically translated
-// Use like this: ws:=LoadResStringW(@NameOfResourceString);
-function LoadResString(ResStringRec: PResStringRec): WideString;
-function LoadResStringW(ResStringRec: PResStringRec): UnicodeString;
-
-// This returns an empty string if not translated or translator name is not specified.
-function GetTranslatorNameAndEmail: TranslatedUnicodeString;
-
-(* *************************************************************************** *)
-(* *)
-(* ADVANCED FUNCTIONALITY *)
-(* *)
-(* *************************************************************************** *)
-
-const
-  DefaultTextDomain = 'default';
-
-var
-  ExecutableFilename: FilenameString;
-  // This is set to paramstr(0) or the name of the DLL you are creating.
-
-const
-  PreferExternal = True;
-  // Set to true, to prefer external *.mo over embedded translation
-  UseMemoryMappedFiles = True;
-  // Set to False, to use the mo-file as independent copy in memory (you can update the file while it is in use)
-  ReReadMoFileOnSameLanguage = True;
-  // Set to True, to reread mo-file if the current language is selected again
-
-const
-  // Subversion source code version control version information
-  VCSVersion = '$LastChangedRevision: 220 $';
-
-type
-  EGnuGettext = class(Exception);
-  EGGProgrammingError = class(EGnuGettext);
-  EGGComponentError = class(EGnuGettext);
-  EGGIOError = class(EGnuGettext);
-  EGGAnsi2WideConvError = class(EGnuGettext);
-
-  // This function will turn resourcestring hooks on or off, eventually with BPL file support.
-  // Please do not activate BPL file support when the package is in design mode.
-const
-  AutoCreateHooks = True;
-procedure HookIntoResourceStrings(enabled: boolean = True;
-  SupportPackages: boolean = false);
-
-(* *************************************************************************** *)
-(* *)
-(* CLASS based implementation. *)
-(* Use TGnuGettextInstance to have more than one language *)
-(* in your application at the same time *)
-(* *)
-(* *************************************************************************** *)
-
-type
-  TOnDebugLine = Procedure(Sender: TObject; const Line: String;
-    var Discard: boolean) of Object;
-  // Set Discard to false if output should still go to ordinary debug log
-  TGetPluralForm = function(Number: longint): Integer;
-  TDebugLogger = procedure(Line: AnsiString) of object;
-
-  { *------------------------------------------------------------------------------
-    Handles .mo files, in separate files or inside the exe file.
-    Don't use this class. It's for internal use.
-    ------------------------------------------------------------------------------- }
-  TMoFile = class
-  /// Threadsafe. Only constructor and destructor are writing to memory
-  private
-    doswap: boolean;
-  public
-    Users: Integer;
-    /// Reference count. If it reaches zero, this object should be destroyed.
-    constructor Create(const filename: FilenameString; const Offset: int64;
-      Size: int64; const xUseMemoryMappedFiles: boolean);
-    destructor Destroy; override;
-    function gettext(const msgid: RawUtf8String; var found: boolean)
-      : RawUtf8String; // uses mo file and utf-8
-    property isSwappedArchitecture: boolean read doswap;
-  private
-    N, O, T: Cardinal;
-    /// Values defined at http://www.linuxselfhelp.com/gnu/gettext/html_chapter/gettext_6.html
-    startindex, startstep: Integer;
-    FUseMemoryMappedFiles: boolean;
-    mo: THandle;
-    momapping: THandle;
-    momemoryHandle: PAnsiChar;
-    momemory: PAnsiChar;
-    function autoswap32(i: Cardinal): Cardinal;
-    function CardinalInMem(baseptr: PAnsiChar; Offset: Cardinal): Cardinal;
-  end;
-
-  { *------------------------------------------------------------------------------
-    Handles all issues regarding a specific domain.
-    Don't use this class. It's for internal use.
-    ------------------------------------------------------------------------------- }
-  TDomain = class
-  private
-    enabled: boolean;
-    vDirectory: FilenameString;
-    procedure setDirectory(const dir: FilenameString);
-  public
-    DebugLogger: TDebugLogger;
-    domain: DomainString;
-    property Directory: FilenameString read vDirectory write setDirectory;
-    constructor Create;
-    destructor Destroy; override;
-    // Set parameters
-    procedure SetLanguageCode(const langcode: LanguageString);
-    procedure SetFilename(const filename: FilenameString);
-    // Bind this domain to a specific file
-    // Get information
-    procedure GetListOfLanguages(list: TStrings);
-    function GetTranslationProperty(propertyname: ComponentNameString)
-      : TranslatedUnicodeString;
-    function gettext(const msgid: RawUtf8String): RawUtf8String;
-    // uses mo file and utf-8
-  private
-    mofile: TMoFile;
-    SpecificFilename: FilenameString;
-    curlang: LanguageString;
-    OpenHasFailedBefore: boolean;
-    procedure OpenMoFile;
-    procedure CloseMoFile;
-  end;
-
-  { *------------------------------------------------------------------------------
-    Helper class for invoking events.
-    ------------------------------------------------------------------------------- }
-  TExecutable = class
-    procedure Execute; virtual; abstract;
-  end;
-
-  { *------------------------------------------------------------------------------
-    Interface to implement if you want to register as a language change listener
-    ------------------------------------------------------------------------------- }
-  IGnuGettextInstanceWhenNewLanguageListener = interface
-    procedure WhenNewLanguage(const LanguageID: LanguageString);
-  end;
-
-  { *------------------------------------------------------------------------------
-    The main translation engine.
-    ------------------------------------------------------------------------------- }
-  TGnuGettextInstance = class
-  private
-    fOnDebugLine: TOnDebugLine;
-  public
-    enabled: boolean;
-    /// Set this to false to disable translations
-    DesignTimeCodePage: Integer;
-    /// See MultiByteToWideChar() in Win32 API for documentation
-    constructor Create;
-    destructor Destroy; override;
-    procedure UseLanguage(LanguageCode: LanguageString);
-    procedure GetListOfLanguages(const domain: DomainString; list: TStrings);
-    // Puts list of language codes, for which there are translations in the specified domain, into list
-{$IFNDEF UNICODE}
-    function gettext(const szMsgId: AnsiString): TranslatedUnicodeString;
-      overload; virtual;
-    function ngettext(const singular, plural: AnsiString; Number: longint)
-      : TranslatedUnicodeString; overload; virtual;
-{$ENDIF}
-    function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString;
-      overload; virtual;
-    function gettext_NoExtract(const szMsgId: MsgIdString)
-      : TranslatedUnicodeString;
-    function gettext_NoOp(const szMsgId: MsgIdString): TranslatedUnicodeString;
-    function ngettext(const singular, plural: MsgIdString; Number: longint)
-      : TranslatedUnicodeString; overload; virtual;
-    function ngettext_NoExtract(const singular, plural: MsgIdString;
-      Number: longint): TranslatedUnicodeString;
-    function GetCurrentLanguage: LanguageString;
-    function GetTranslationProperty(const propertyname: ComponentNameString)
-      : TranslatedUnicodeString;
-    function GetTranslatorNameAndEmail: TranslatedUnicodeString;
-
-    // Form translation tools, these are not threadsafe. All TP_ procs must be called just before TranslateProperites()
-    procedure TP_Ignore(AnObject: TObject; const name: ComponentNameString);
-    procedure TP_IgnoreClass(IgnClass: TClass);
-    procedure TP_IgnoreClassProperty(IgnClass: TClass;
-      propertyname: ComponentNameString);
-    procedure TP_GlobalIgnoreClass(IgnClass: TClass);
-    procedure TP_GlobalIgnoreClassProperty(IgnClass: TClass;
-      propertyname: ComponentNameString);
-    procedure TP_GlobalHandleClass(HClass: TClass; Handler: TTranslator);
-    procedure TranslateProperties(AnObject: TObject;
-      textdomain: DomainString = '');
-    procedure TranslateComponent(AnObject: TComponent;
-      const textdomain: DomainString = '');
-    procedure RetranslateComponent(AnObject: TComponent;
-      const textdomain: DomainString = '');
-
-    // Multi-domain functions
-{$IFNDEF UNICODE}
-    function dgettext(const szDomain: DomainString; const szMsgId: AnsiString)
-      : TranslatedUnicodeString; overload; virtual;
-    function dngettext(const szDomain: DomainString;
-      const singular, plural: AnsiString; Number: longint)
-      : TranslatedUnicodeString; overload; virtual;
-{$ENDIF}
-    function dgettext(const szDomain: DomainString; const szMsgId: MsgIdString)
-      : TranslatedUnicodeString; overload; virtual;
-    function dgettext_NoExtract(const szDomain: DomainString;
-      const szMsgId: MsgIdString): TranslatedUnicodeString;
-    function dngettext(const szDomain: DomainString;
-      const singular, plural: MsgIdString; Number: longint)
-      : TranslatedUnicodeString; overload; virtual;
-    function dngettext_NoExtract(const szDomain: DomainString;
-      const singular, plural: MsgIdString; Number: longint)
-      : TranslatedUnicodeString;
-    procedure textdomain(const szDomain: DomainString);
-    function getcurrenttextdomain: DomainString;
-    procedure bindtextdomain(const szDomain: DomainString;
-      const szDirectory: FilenameString);
-    procedure bindtextdomainToFile(const szDomain: DomainString;
-      const filename: FilenameString);
-    // Also works with files embedded in exe file
-
-    // Windows API functions
-    function LoadResString(ResStringRec: PResStringRec): UnicodeString;
-
-    // Output all log info to this file. This may only be called once.
-    procedure DebugLogToFile(const filename: FilenameString;
-      append: boolean = false);
-    procedure DebugLogPause(PauseEnabled: boolean);
-    property OnDebugLine: TOnDebugLine read fOnDebugLine write fOnDebugLine;
-    // If set, all debug output goes here
-{$IFNDEF UNICODE}
-    // Conversion according to design-time character set
-    function ansi2wideDTCP(const s: AnsiString): MsgIdString;
-    // Convert using Design Time Code Page
-{$ENDIF}
-    procedure RegisterWhenNewLanguageListener
-      (Listener: IGnuGettextInstanceWhenNewLanguageListener);
-    procedure UnregisterWhenNewLanguageListener
-      (Listener: IGnuGettextInstanceWhenNewLanguageListener);
-  protected
-    procedure TranslateStrings(sl: TStrings; const textdomain: DomainString);
-
-    // Override these three, if you want to inherited from this class
-    // to create a new class that handles other domain and language dependent
-    // issues
-    procedure WhenNewLanguage(const LanguageID: LanguageString); virtual;
-    // Override to know when language changes
-    procedure WhenNewDomain(const textdomain: DomainString); virtual;
-    // Override to know when text domain changes. Directory is purely informational
-    procedure WhenNewDomainDirectory(const textdomain: DomainString;
-      const Directory: FilenameString); virtual;
-    // Override to know when any text domain's directory changes. It won't be called if a domain is fixed to a specific file.
-  private
-    curlang: LanguageString;
-    curGetPluralForm: TGetPluralForm;
-    curmsgdomain: DomainString;
-    savefileCS: TMultiReadExclusiveWriteSynchronizer;
-    savefile: TextFile;
-    savememory: TStringList;
-    DefaultDomainDirectory: FilenameString;
-    domainlist: TStringList;
-    /// List of domain names. Objects are TDomain.
-    TP_IgnoreList: TStringList;
-    /// Temporary list, reset each time TranslateProperties is called
-    TP_ClassHandling: TList;
-    /// Items are TClassMode. If a is derived from b, a comes first
-    TP_GlobalClassHandling: TList;
-    /// Items are TClassMode. If a is derived from b, a comes first
-    TP_Retranslator: TExecutable;
-    /// Cast this to TTP_Retranslator
-    fWhenNewLanguageListeners: TInterfaceList;
-    /// List of all registered WhenNewLanguage listeners
-{$IFDEF DXGETTEXTDEBUG}
-    DebugLogCS: TMultiReadExclusiveWriteSynchronizer;
-    DebugLog: TStream;
-    DebugLogOutputPaused: boolean;
-{$ENDIF}
-    function TP_CreateRetranslator: TExecutable; // Must be freed by caller!
-    procedure FreeTP_ClassHandlingItems;
-{$IFDEF DXGETTEXTDEBUG}
-    procedure DebugWriteln(Line: AnsiString);
-{$ENDIF}
-    procedure TranslateProperty(AnObject: TObject; PropInfo: PPropInfo;
-      TodoList: TStrings; const textdomain: DomainString);
-    function Getdomain(const domain: DomainString;
-      const DefaultDomainDirectory: FilenameString;
-      const curlang: LanguageString): TDomain;
-    // Translates a single property of an object
-  end;
-
-var
-  DefaultInstance: TGnuGettextInstance;
-  /// Default instance of the main API for singlethreaded applications.
-
-implementation
-
-{$IFNDEF MSWINDOWS}
-{$IFNDEF LINUX}
-  'This version of gnugettext.pas is only meant to be compiled with Kylix 3,'
-  'Delphi 6, Delphi 7 and later versions. If you use other versions, please'
-  'get the gnugettext.pas version from the Delphi 5 directory.'
-{$ENDIF}
-{$ENDIF}
-(* ************************************************************************ *)
-// Some comments on the implementation:
-// This unit should be independent of other units where possible.
-// It should have a small footprint in any way.
-(* ************************************************************************ *)
-// TMultiReadExclusiveWriteSynchronizer is used instead of TCriticalSection
-// because it makes this unit independent of the SyncObjs unit
-(* ************************************************************************ *)
-
-{$B-,R+,I+,Q+}
-  type TTP_RetranslatorItem = class obj: TObject;
-Propname:
-ComponentNameString;
-OldValue:
-TranslatedUnicodeString;
-end;
-TTP_Retranslator = class(TExecutable)textdomain: DomainString;
-Instance:
-TGnuGettextInstance;
-
-constructor Create;
-  destructor Destroy; override;
-    procedure Remember(obj: TObject; Propname: ComponentNameString;
-      OldValue: TranslatedUnicodeString);
-      procedure Execute; override;
-      private
-        list: TList;
-        end;
-        TEmbeddedFileInfo = class Offset, Size: int64;
-        end;
-        TFileLocator = class
-        // This class finds files even when embedded inside executable
-          constructor Create;
-        destructor Destroy;
-        override;
-        function FindSignaturePos(const signature: RawByteString;
-          str: TFileStream): int64;
-        procedure Analyze; // List files embedded inside executable
-        function FileExists(filename: FilenameString): boolean;
-        function GetMoFile(filename: FilenameString;
-          DebugLogger: TDebugLogger): TMoFile;
-        procedure ReleaseMoFile(mofile: TMoFile);
-      private
-        basedirectory: FilenameString;
-        filelist: TStringList;
-        // Objects are TEmbeddedFileInfo. Filenames are relative to .exe file
-        MoFilesCS: TMultiReadExclusiveWriteSynchronizer;
-        MoFiles: TStringList;
-        // Objects are filenames+offset, objects are TMoFile
-        function ReadInt64(str: TStream): int64;
-        end;
-        TGnuGettextComponentMarker = class(TComponent)public LastLanguage
-          : LanguageString;
-        Retranslator: TExecutable;
-        destructor Destroy;
-        override;
-        end;
-        TClassMode = class HClass: TClass;
-        SpecialHandler: TTranslator;
-        PropertiesToIgnore: TStringList; // This is ignored if Handler is set
-        constructor Create;
-        destructor Destroy;
-        override;
-        end;
-        TRStrinfo = record strlength, stroffset: Cardinal;
-        end;
-        TStrInfoArr = array [0 .. 10000000] of TRStrinfo;
-        PStrInfoArr = ^TStrInfoArr;
-        TCharArray5 = array [0 .. 4] of ansichar;
-        THook = // Replaces a runtime library procedure with a custom procedure
-          class public constructor Create(OldProcedure, NewProcedure: pointer;
-          FollowJump: boolean = false);
-        destructor Destroy;
-        override; // Restores unhooked state
-        procedure Reset(FollowJump: boolean = false);
-        // Disables and picks up patch points again
-        procedure Disable;
-        procedure Enable;
-      private
-        oldproc, newproc: pointer;
-        Patch: TCharArray5;
-        Original: TCharArray5;
-        PatchPosition: PAnsiChar;
-        procedure Shutdown;
-        // Same as destroy, except that object is not destroyed
-        end;
-
-      var
-        // System information
-        Win32PlatformIsUnicode: boolean = false;
-
-        // Information about files embedded inside .exe file
-        FileLocator: TFileLocator;
-
-        // Hooks into runtime library functions
-        ResourceStringDomainListCS: TMultiReadExclusiveWriteSynchronizer;
-        ResourceStringDomainList: TStringList;
-        ComponentDomainListCS: TMultiReadExclusiveWriteSynchronizer;
-        ComponentDomainList: TStringList;
-        HookLoadResString: THook;
-        HookLoadStr: THook;
-        HookFmtLoadStr: THook;
-
-        function GGGetEnvironmentVariable(const name: WideString): WideString;
-        var
-          Len: Integer;
-          W: WideString;
-        begin
-          Result := '';
-          SetLength(W, 1);
-          Len := GetEnvironmentVariableW(PWideChar(Name), PWideChar(W), 1);
-          if Len > 0 then
-          begin
-            SetLength(Result, Len - 1);
-            GetEnvironmentVariableW(PWideChar(Name), PWideChar(Result), Len);
-          end;
-        end;
-
-        function StripCRRawMsgId(s: RawUtf8String): RawUtf8String;
-        var
-          i: Integer;
-        begin
-          i := 1;
-          while i <= length(s) do
-          begin
-            if s[i] = #13 then
-              delete(s, i, 1)
-            else
-              inc(i);
-          end;
-          Result := s;
-        end;
-
-        function EnsureLineBreakInTranslatedString(s: RawUtf8String)
-          : RawUtf8String;
-{$IFDEF MSWINDOWS}
-        var
-          i: Integer;
-{$ENDIF}
-        begin
-{$IFDEF MSWINDOWS}
-          Assert(sLinebreak = AnsiString(#13#10));
-          i := 1;
-          while i <= length(s) do
-          begin
-            if (s[i] = #10) and (MidStr(s, i - 1, 1) <> #13) then
-            begin
-              insert(#13, s, i);
-              inc(i, 2);
-            end
-            else
-              inc(i);
-          end;
-{$ENDIF}
-          Result := s;
-        end;
-
-        function IsWriteProp(Info: PPropInfo): boolean;
-        begin
-          Result := Assigned(Info) and (Info^.SetProc <> nil);
-        end;
-
-        function ResourceStringGettext(msgid: MsgIdString)
-          : TranslatedUnicodeString;
-        var
-          i: Integer;
-        begin
-          if (msgid = '') or (ResourceStringDomainListCS = nil) then
-          begin
-            // This only happens during very complicated program startups that fail,
-            // or when Msgid=''
-            Result := msgid;
-            exit;
-          end;
-          ResourceStringDomainListCS.BeginRead;
-          try
-            for i := 0 to ResourceStringDomainList.Count - 1 do
-            begin
-              Result := dgettext(ResourceStringDomainList.Strings[i], msgid);
-              if Result <> msgid then
-                break;
-            end;
-          finally
-            ResourceStringDomainListCS.EndRead;
-          end;
-        end;
-
-        function ComponentGettext(msgid: MsgIdString;
-          Instance: TGnuGettextInstance = nil): TranslatedUnicodeString;
-        var
-          i: Integer;
-        begin
-          if (msgid = '') or (ComponentDomainListCS = nil) then
-          begin
-            // This only happens during very complicated program startups that fail,
-            // or when Msgid=''
-            Result := msgid;
-            exit;
-          end;
-          ComponentDomainListCS.BeginRead;
-          try
-            for i := 0 to ComponentDomainList.Count - 1 do
-            begin
-              if Assigned(Instance) then
-                Result := Instance.dgettext
-                  (ComponentDomainList.Strings[i], msgid)
-              else
-                Result := dgettext(ComponentDomainList.Strings[i], msgid);
-              if Result <> msgid then
-                break;
-            end;
-          finally
-            ComponentDomainListCS.EndRead;
-          end;
-        end;
-
-        function gettext(const szMsgId: MsgIdString): TranslatedUnicodeString;
-        begin
-          Result := DefaultInstance.gettext(szMsgId);
-        end;
-
-        function gettext_NoExtract(const szMsgId: MsgIdString)
-          : TranslatedUnicodeString;
-        begin
-          // This one is very useful for translating text in variables.
-          // This can sometimes be necessary, and by using this function,
-          // the source code scanner will not trigger warnings.
-          Result := gettext(szMsgId);
-        end;
-
-        function gettext_NoOp(const szMsgId: MsgIdString)
-          : TranslatedUnicodeString;
-        begin
-          // *** With this function Strings can be added to the po-file without beeing
-          // ResourceStrings (dxgettext will add the string and this function will
-          // return it without a change)
-          // see gettext manual
-          // 4.7 - Special Cases of Translatable Strings
-          // http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases
-          Result := DefaultInstance.gettext_NoOp(szMsgId);
-        end;
-
-      { *------------------------------------------------------------------------------
-        This is the main translation procedure used in programs. It takes a parameter,
-        looks it up in the translation dictionary, and returns the translation.
-        If no translation is found, the parameter is returned.
-
-        @param szMsgId The text, that should be displayed if no translation is found.
-        ------------------------------------------------------------------------------- }
-        function _(const szMsgId: MsgIdString): TranslatedUnicodeString;
-        begin
-          Result := DefaultInstance.gettext(szMsgId);
-        end;
-
-      { *------------------------------------------------------------------------------
-        Translates a text, using a specified translation domain.
-        If no translation is found, the parameter is returned.
-
-        @param szDomain Which translation domain that should be searched for a translation.
-        @param szMsgId The text, that should be displayed if no translation is found.
-        ------------------------------------------------------------------------------- }
-        function dgettext(const szDomain: DomainString;
-          const szMsgId: MsgIdString): TranslatedUnicodeString;
-        begin
-          Result := DefaultInstance.dgettext(szDomain, szMsgId);
-        end;
-
-        function dgettext_NoExtract(const szDomain: DomainString;
-          const szMsgId: MsgIdString): TranslatedUnicodeString;
-        begin
-          // This one is very useful for translating text in variables.
-          // This can sometimes be necessary, and by using this function,
-          // the source code scanner will not trigger warnings.
-          Result := dgettext(szDomain, szMsgId);
-        end;
-
-        function dngettext(const szDomain: DomainString;
-          const singular, plural: MsgIdString; Number: longint)
-          : TranslatedUnicodeString;
-        begin
-          Result := DefaultInstance.dngettext(szDomain, singular,
-            plural, Number);
-        end;
-
-        function ngettext(const singular, plural: MsgIdString; Number: longint)
-          : TranslatedUnicodeString;
-        begin
-          Result := DefaultInstance.ngettext(singular, plural, Number);
-        end;
-
-        function ngettext_NoExtract(const singular, plural: MsgIdString;
-          Number: longint): TranslatedUnicodeString;
-        begin
-          // This one is very useful for translating text in variables.
-          // This can sometimes be necessary, and by using this function,
-          // the source code scanner will not trigger warnings.
-          Result := ngettext(singular, plural, Number);
-        end;
-
-        procedure textdomain(const szDomain: DomainString);
-        begin
-          DefaultInstance.textdomain(szDomain);
-        end;
-
-        procedure SetGettextEnabled(enabled: boolean);
-        begin
-          DefaultInstance.enabled := enabled;
-        end;
-
-        function getcurrenttextdomain: DomainString;
-        begin
-          Result := DefaultInstance.getcurrenttextdomain;
-        end;
-
-        procedure bindtextdomain(const szDomain: DomainString;
-          const szDirectory: FilenameString);
-        begin
-          DefaultInstance.bindtextdomain(szDomain, szDirectory);
-        end;
-
-        procedure TP_Ignore(AnObject: TObject; const name: FilenameString);
-        begin
-          DefaultInstance.TP_Ignore(AnObject, name);
-        end;
-
-        procedure TP_GlobalIgnoreClass(IgnClass: TClass);
-        begin
-          DefaultInstance.TP_GlobalIgnoreClass(IgnClass);
-        end;
-
-        procedure TP_IgnoreClass(IgnClass: TClass);
-        begin
-          DefaultInstance.TP_IgnoreClass(IgnClass);
-        end;
-
-        procedure TP_IgnoreClassProperty(IgnClass: TClass;
-          const propertyname: ComponentNameString);
-        begin
-          DefaultInstance.TP_IgnoreClassProperty(IgnClass, propertyname);
-        end;
-
-        procedure TP_GlobalIgnoreClassProperty(IgnClass: TClass;
-          const propertyname: ComponentNameString);
-        begin
-          DefaultInstance.TP_GlobalIgnoreClassProperty(IgnClass, propertyname);
-        end;
-
-        procedure TP_GlobalHandleClass(HClass: TClass; Handler: TTranslator);
-        begin
-          DefaultInstance.TP_GlobalHandleClass(HClass, Handler);
-        end;
-
-        procedure TranslateComponent(AnObject: TComponent;
-          const textdomain: DomainString = '');
-        begin
-          DefaultInstance.TranslateComponent(AnObject, textdomain);
-        end;
-
-        procedure RetranslateComponent(AnObject: TComponent;
-          const textdomain: DomainString = '');
-        begin
-          DefaultInstance.RetranslateComponent(AnObject, textdomain);
-        end;
-
-{$IFDEF MSWINDOWS}
-
-      // These constants are only used in Windows 95
-      // Thanks to Frank Andreas de Groot for this table
-      const
-        IDAfrikaans = $0436;
-        IDAlbanian = $041C;
-        IDArabicAlgeria = $1401;
-        IDArabicBahrain = $3C01;
-        IDArabicEgypt = $0C01;
-        IDArabicIraq = $0801;
-        IDArabicJordan = $2C01;
-        IDArabicKuwait = $3401;
-        IDArabicLebanon = $3001;
-        IDArabicLibya = $1001;
-        IDArabicMorocco = $1801;
-        IDArabicOman = $2001;
-        IDArabicQatar = $4001;
-        IDArabic = $0401;
-        IDArabicSyria = $2801;
-        IDArabicTunisia = $1C01;
-        IDArabicUAE = $3801;
-        IDArabicYemen = $2401;
-        IDArmenian = $042B;
-        IDAssamese = $044D;
-        IDAzeriCyrillic = $082C;
-        IDAzeriLatin = $042C;
-        IDBasque = $042D;
-        IDByelorussian = $0423;
-        IDBengali = $0445;
-        IDBulgarian = $0402;
-        IDBurmese = $0455;
-        IDCatalan = $0403;
-        IDChineseHongKong = $0C04;
-        IDChineseMacao = $1404;
-        IDSimplifiedChinese = $0804;
-        IDChineseSingapore = $1004;
-        IDTraditionalChinese = $0404;
-        IDCroatian = $041A;
-        IDCzech = $0405;
-        IDDanish = $0406;
-        IDBelgianDutch = $0813;
-        IDDutch = $0413;
-        IDEnglishAUS = $0C09;
-        IDEnglishBelize = $2809;
-        IDEnglishCanadian = $1009;
-        IDEnglishCaribbean = $2409;
-        IDEnglishIreland = $1809;
-        IDEnglishJamaica = $2009;
-        IDEnglishNewZealand = $1409;
-        IDEnglishPhilippines = $3409;
-        IDEnglishSouthAfrica = $1C09;
-        IDEnglishTrinidad = $2C09;
-        IDEnglishUK = $0809;
-        IDEnglishUS = $0409;
-        IDEnglishZimbabwe = $3009;
-        IDEstonian = $0425;
-        IDFaeroese = $0438;
-        IDFarsi = $0429;
-        IDFinnish = $040B;
-        IDBelgianFrench = $080C;
-        IDFrenchCameroon = $2C0C;
-        IDFrenchCanadian = $0C0C;
-        IDFrenchCotedIvoire = $300C;
-        IDFrench = $040C;
-        IDFrenchLuxembourg = $140C;
-        IDFrenchMali = $340C;
-        IDFrenchMonaco = $180C;
-        IDFrenchReunion = $200C;
-        IDFrenchSenegal = $280C;
-        IDSwissFrench = $100C;
-        IDFrenchWestIndies = $1C0C;
-        IDFrenchZaire = $240C;
-        IDFrisianNetherlands = $0462;
-        IDGaelicIreland = $083C;
-        IDGaelicScotland = $043C;
-        IDGalician = $0456;
-        IDGeorgian = $0437;
-        IDGermanAustria = $0C07;
-        IDGerman = $0407;
-        IDGermanLiechtenstein = $1407;
-        IDGermanLuxembourg = $1007;
-        IDSwissGerman = $0807;
-        IDGreek = $0408;
-        IDGujarati = $0447;
-        IDHebrew = $040D;
-        IDHindi = $0439;
-        IDHungarian = $040E;
-        IDIcelandic = $040F;
-        IDIndonesian = $0421;
-        IDItalian = $0410;
-        IDSwissItalian = $0810;
-        IDJapanese = $0411;
-        IDKannada = $044B;
-        IDKashmiri = $0460;
-        IDKazakh = $043F;
-        IDKhmer = $0453;
-        IDKirghiz = $0440;
-        IDKonkani = $0457;
-        IDKorean = $0412;
-        IDLao = $0454;
-        IDLatvian = $0426;
-        IDLithuanian = $0427;
-        IDMacedonian = $042F;
-        IDMalaysian = $043E;
-        IDMalayBruneiDarussalam = $083E;
-        IDMalayalam = $044C;
-        IDMaltese = $043A;
-        IDManipuri = $0458;
-        IDMarathi = $044E;
-        IDMongolian = $0450;
-        IDNepali = $0461;
-        IDNorwegianBokmol = $0414;
-        IDNorwegianNynorsk = $0814;
-        IDOriya = $0448;
-        IDPolish = $0415;
-        IDBrazilianPortuguese = $0416;
-        IDPortuguese = $0816;
-        IDPunjabi = $0446;
-        IDRhaetoRomanic = $0417;
-        IDRomanianMoldova = $0818;
-        IDRomanian = $0418;
-        IDRussianMoldova = $0819;
-        IDRussian = $0419;
-        IDSamiLappish = $043B;
-        IDSanskrit = $044F;
-        IDSerbianCyrillic = $0C1A;
-        IDSerbianLatin = $081A;
-        IDSesotho = $0430;
-        IDSindhi = $0459;
-        IDSlovak = $041B;
-        IDSlovenian = $0424;
-        IDSorbian = $042E;
-        IDSpanishArgentina = $2C0A;
-        IDSpanishBolivia = $400A;
-        IDSpanishChile = $340A;
-        IDSpanishColombia = $240A;
-        IDSpanishCostaRica = $140A;
-        IDSpanishDominicanRepublic = $1C0A;
-        IDSpanishEcuador = $300A;
-        IDSpanishElSalvador = $440A;
-        IDSpanishGuatemala = $100A;
-        IDSpanishHonduras = $480A;
-        IDMexicanSpanish = $080A;
-        IDSpanishNicaragua = $4C0A;
-        IDSpanishPanama = $180A;
-        IDSpanishParaguay = $3C0A;
-        IDSpanishPeru = $280A;
-        IDSpanishPuertoRico = $500A;
-        IDSpanishModernSort = $0C0A;
-        IDSpanish = $040A;
-        IDSpanishUruguay = $380A;
-        IDSpanishVenezuela = $200A;
-        IDSutu = $0430;
-        IDSwahili = $0441;
-        IDSwedishFinland = $081D;
-        IDSwedish = $041D;
-        IDTajik = $0428;
-        IDTamil = $0449;
-        IDTatar = $0444;
-        IDTelugu = $044A;
-        IDThai = $041E;
-        IDTibetan = $0451;
-        IDTsonga = $0431;
-        IDTswana = $0432;
-        IDTurkish = $041F;
-        IDTurkmen = $0442;
-        IDUkrainian = $0422;
-        IDUrdu = $0420;
-        IDUzbekCyrillic = $0843;
-        IDUzbekLatin = $0443;
-        IDVenda = $0433;
-        IDVietnamese = $042A;
-        IDWelsh = $0452;
-        IDXhosa = $0434;
-        IDZulu = $0435;
-
-        function GetWindowsLanguage: WideString;
-        var
-          langid, N, pc: Cardinal;
-          buf: array of Char;
-          langcode: WideString;
-          CountryName: array [0 .. 4] of widechar;
-          LanguageName: array [0 .. 4] of widechar;
-          works: boolean;
-        begin
-          if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion >= 6)
-          then
-          begin
-            pc := 0; // Retrieve the UI language (not the localeinfo) JR - Sept. 2023
-            works := GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, @N, nil,
-              @pc); // available since Vista
-            if works then
-            begin
-              SetLength(buf, pc);
-              works := GetUserPreferredUILanguages(MUI_LANGUAGE_NAME, @N,
-                @buf[0], @pc);
-              if works then
-                langcode := ReplaceStr(PChar(@buf[0]), '-', '_');
-              buf := nil;
-            end;
-          end
-          else
-          begin // XP and older
-            // The return value of GetLocaleInfo is compared with 3 = 2 characters and a zero
-            works := 3 = GetLocaleInfoW(LOCALE_USER_DEFAULT,
-              LOCALE_SISO639LANGNAME, LanguageName, SizeOf(LanguageName));
-            works := works and
-              (3 = GetLocaleInfoW(LOCALE_USER_DEFAULT, LOCALE_SISO3166CTRYNAME,
-              CountryName, SizeOf(CountryName)));
-            if works then
-            begin
-              // Windows 98, Me, NT4, 2000, XP and newer
-              langcode := PWideChar(@(LanguageName[0]));
-              if lowercase(langcode) = 'no' then
-                langcode := 'nb';
-              langcode := langcode + '_' + PWideChar(@CountryName[0]);
-            end;
-          end;
-          if not works then
-          begin
-            // This part should only happen on Windows 95.
-            langid := GetThreadLocale;
-            case langid of
-              IDBelgianDutch:
-                langcode := 'nl_BE';
-              IDBelgianFrench:
-                langcode := 'fr_BE';
-              IDBrazilianPortuguese:
-                langcode := 'pt_BR';
-              IDDanish:
-                langcode := 'da_DK';
-              IDDutch:
-                langcode := 'nl_NL';
-              IDEnglishUK:
-                langcode := 'en_GB';
-              IDEnglishUS:
-                langcode := 'en_US';
-              IDFinnish:
-                langcode := 'fi_FI';
-              IDFrench:
-                langcode := 'fr_FR';
-              IDFrenchCanadian:
-                langcode := 'fr_CA';
-              IDGerman:
-                langcode := 'de_DE';
-              IDGermanLuxembourg:
-                langcode := 'de_LU';
-              IDGreek:
-                langcode := 'el_GR';
-              IDIcelandic:
-                langcode := 'is_IS';
-              IDItalian:
-                langcode := 'it_IT';
-              IDKorean:
-                langcode := 'ko_KO';
-              IDNorwegianBokmol:
-                langcode := 'nb_NO';
-              IDNorwegianNynorsk:
-                langcode := 'nn_NO';
-              IDPolish:
-                langcode := 'pl_PL';
-              IDPortuguese:
-                langcode := 'pt_PT';
-              IDRussian:
-                langcode := 'ru_RU';
-              IDSpanish, IDSpanishModernSort:
-                langcode := 'es_ES';
-              IDSwedish:
-                langcode := 'sv_SE';
-              IDSwedishFinland:
-                langcode := 'sv_FI';
-            else
-              langcode := 'C';
-            end;
-          end;
-          Result := langcode;
-        end;
-{$ENDIF}
-{$IFNDEF UNICODE}
-        function LoadResStringA(ResStringRec: PResStringRec): AnsiString;
-        begin
-          Result := DefaultInstance.LoadResString(ResStringRec);
-        end;
-{$ENDIF}
-        function GetTranslatorNameAndEmail: TranslatedUnicodeString;
-        begin
-          Result := DefaultInstance.GetTranslatorNameAndEmail;
-        end;
-
-        procedure UseLanguage(LanguageCode: LanguageString);
-        begin
-          DefaultInstance.UseLanguage(LanguageCode);
-        end;
-
-      type
-        PStrData = ^TStrData;
-
-        TStrData = record
-          Ident: Integer;
-          str: String;
-        end;
-
-        function SysUtilsEnumStringModules(Instance: HINST;
-          Data: pointer): boolean;
-{$IFDEF MSWINDOWS}
-        var
-          Buffer: array [0 .. 1023] of Char;
-          // WideChar in Delphi 2008, AnsiChar before that
-        begin
-          with PStrData(Data)^ do
-          begin
-            SetString(str, Buffer, LoadString(Instance, Ident, @Buffer[0],
-              SizeOf(Buffer)));
-            Result := str = '';
-          end;
-        end;
-{$ENDIF}
-{$IFDEF LINUX}
-
-      var
-        rs: TResStringRec;
-        Module: HModule;
-      begin
-        Module := Instance;
-        rs.Module := @Module;
-        with PStrData(Data)^ do
-        begin
-          rs.Identifier := Ident;
-          str := System.LoadResString(@rs);
-          Result := str = '';
-        end;
-      end;
-{$ENDIF}
-      function SysUtilsFindStringResource(Ident: NativeInt): string;
-      var
-        StrData: TStrData;
-      begin
-        StrData.Ident := Ident;
-        StrData.str := '';
-        EnumResourceModules(SysUtilsEnumStringModules, @StrData);
-        Result := StrData.str;
-      end;
-
-      function SysUtilsLoadStr(Ident: Integer): string;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DefaultInstance.DebugWriteln('Sysutils.LoadRes(' + IntToStr(Ident) +
-          ') called');
-{$ENDIF}
-        Result := ResourceStringGettext(SysUtilsFindStringResource(Ident));
-      end;
-
-      function SysUtilsFmtLoadStr(Ident: Integer;
-        const Args: array of const): string;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DefaultInstance.DebugWriteln('Sysutils.FmtLoadRes(' + IntToStr(Ident) +
-          ',Args) called');
-{$ENDIF}
-        FmtStr(Result, ResourceStringGettext(SysUtilsFindStringResource
-          (Ident)), Args);
-      end;
-
-      function LoadResString(ResStringRec: PResStringRec): WideString;
-      begin
-        Result := DefaultInstance.LoadResString(ResStringRec);
-      end;
-
-      function LoadResStringW(ResStringRec: PResStringRec): UnicodeString;
-      begin
-        Result := DefaultInstance.LoadResString(ResStringRec);
-      end;
-
-      function GetCurrentLanguage: LanguageString;
-      begin
-        Result := DefaultInstance.GetCurrentLanguage;
-      end;
-
-    { TDomain }
-
-      procedure TDomain.CloseMoFile;
-      begin
-        if mofile <> nil then
-        begin
-          FileLocator.ReleaseMoFile(mofile);
-          mofile := nil;
-        end;
-        OpenHasFailedBefore := false;
-      end;
-
-      destructor TDomain.Destroy;
-      begin
-        CloseMoFile;
-        inherited;
-      end;
-
-{$IFDEF mswindows}
-      function GetLastWinError: WideString;
-      var
-        errcode: Cardinal;
-      begin
-        SetLength(Result, 2000);
-        errcode := GetLastError();
-        FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM, nil, errcode, 0,
-          PWideChar(Result), 2000, nil);
-        Result := PWideChar(Result);
-      end;
-{$ENDIF}
-      procedure TDomain.OpenMoFile;
-      var
-        filename: FilenameString;
-      begin
-        // Check if it is already open
-        if mofile <> nil then
-          exit;
-
-        // Check if it has been attempted to open the file before
-        if OpenHasFailedBefore then
-          exit;
-
-        if SpecificFilename <> '' then
-        begin
-          filename := SpecificFilename;
-{$IFDEF DXGETTEXTDEBUG}
-          DebugLogger('Domain ' + domain + ' is bound to specific file ' +
-            filename);
-{$ENDIF}
-        end
-        else
-        begin
-          filename := Directory + curlang + PathDelim + 'LC_MESSAGES' +
-            PathDelim + domain + '.mo';
-          if (not FileLocator.FileExists(filename)) and
-            (not FileExists(filename)) then
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugLogger('Domain ' + domain +
-              ': File does not exist, neither embedded or in file system: ' +
-              filename);
-{$ENDIF}
-            filename := Directory + MidStr(curlang, 1, 2) + PathDelim +
-              'LC_MESSAGES' + PathDelim + domain + '.mo';
-{$IFDEF DXGETTEXTDEBUG}
-            DebugLogger('Domain ' + domain + ' will attempt to use this file: '
-              + filename);
-{$ENDIF}
-          end
-          else
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            if FileLocator.FileExists(filename) then
-              DebugLogger('Domain ' + domain +
-                ' will attempt to use this embedded file: ' + filename)
-            else
-              DebugLogger('Domain ' + domain +
-                ' will attempt to use this file that was found on the file system: '
-                + filename);
-{$ENDIF}
-          end;
-        end;
-        if (not FileLocator.FileExists(filename)) and (not FileExists(filename))
-        then
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugLogger('Domain ' + domain + ' failed to locate the file: ' +
-            filename);
-{$ENDIF}
-          OpenHasFailedBefore := True;
-          exit;
-        end;
-{$IFDEF DXGETTEXTDEBUG}
-        DebugLogger('Domain ' + domain + ' now accesses the file.');
-{$ENDIF}
-        mofile := FileLocator.GetMoFile(filename, DebugLogger);
-
-{$IFDEF DXGETTEXTDEBUG}
-        if mofile.isSwappedArchitecture then
-          DebugLogger
-            ('.mo file is swapped (comes from another CPU architecture)');
-{$ENDIF}
-        // Check, that the contents of the file is utf-8
-        if pos('CHARSET=UTF-8',
-          uppercase(GetTranslationProperty('Content-Type'))) = 0 then
-        begin
-          CloseMoFile;
-{$IFDEF DXGETTEXTDEBUG}
-          DebugLogger('The translation for the language code ' + curlang +
-            ' (in ' + filename +
-            ') does not have charset=utf-8 in its Content-Type. Translations are turned off.');
-{$ENDIF}
-{$IFDEF MSWINDOWS}
-          MessageBoxW(0,
-            PWideChar(WideString('The translation for the language code ' +
-            curlang + ' (in ' + filename +
-            ') does not have charset=utf-8 in its Content-Type. Translations are turned off.')
-            ), 'Localization problem', MB_OK);
-{$ELSE}
-          writeln(stderr, 'The translation for the language code ' + curlang +
-            ' (in ' + filename +
-            ') does not have charset=utf-8 in its Content-Type. Translations are turned off.');
-{$ENDIF}
-          enabled := false;
-        end;
-      end;
-
-{$IFDEF UNICODE}
-      function utf8decode(s: RawByteString): UnicodeString; inline;
-      begin
-        Result := UTF8ToWideString(s);
-      end;
-{$ENDIF}
-      function TDomain.GetTranslationProperty(propertyname: ComponentNameString)
-        : TranslatedUnicodeString;
-      var
-        sl: TStringList;
-        i: Integer;
-        s: string;
-      begin
-        propertyname := uppercase(propertyname) + ': ';
-        sl := TStringList.Create;
-        try
-          sl.Text := utf8decode(gettext(''));
-          for i := 0 to sl.Count - 1 do
-          begin
-            s := sl.Strings[i];
-            if uppercase(MidStr(s, 1, length(propertyname))) = propertyname then
-            begin
-              Result := trim(MidStr(s, length(propertyname) + 1, maxint));
-
-{$IFDEF DXGETTEXTDEBUG}
-              DebugLogger('GetTranslationProperty(' + propertyname +
-                ') returns ''' + Result + '''.');
-{$ENDIF}
-              exit;
-            end;
-          end;
-        finally
-          FreeAndNil(sl);
-        end;
-        Result := '';
-{$IFDEF DXGETTEXTDEBUG}
-        DebugLogger('GetTranslationProperty(' + propertyname +
-          ') did not find any value. An empty string is returned.');
-{$ENDIF}
-      end;
-
-      procedure TDomain.setDirectory(const dir: FilenameString);
-      begin
-        vDirectory := IncludeTrailingPathDelimiter(dir);
-        SpecificFilename := '';
-        CloseMoFile;
-      end;
-
-      procedure AddDomainForResourceString(const domain: DomainString);
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DefaultInstance.DebugWriteln('Extra domain for resourcestring: '
-          + domain);
-{$ENDIF}
-        ResourceStringDomainListCS.BeginWrite;
-        try
-          if ResourceStringDomainList.IndexOf(domain) = -1 then
-            ResourceStringDomainList.Add(domain);
-        finally
-          ResourceStringDomainListCS.EndWrite;
-        end;
-      end;
-
-      procedure RemoveDomainForResourceString(const domain: DomainString);
-      var
-        i: Integer;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DefaultInstance.DebugWriteln('Remove domain for resourcestring: '
-          + domain);
-{$ENDIF}
-        ResourceStringDomainListCS.BeginWrite;
-        try
-          i := ResourceStringDomainList.IndexOf(domain);
-          if i <> -1 then
-            ResourceStringDomainList.delete(i);
-        finally
-          ResourceStringDomainListCS.EndWrite;
-        end;
-      end;
-
-      procedure AddDomains(const Domains: array of DomainString);
-      var
-        i: Integer;
-      begin
-        for i := 0 to High(Domains) do
-          AddDomainForResourceString(Domains[i]);
-      end;
-
-      procedure AddDomainForComponent(const domain: DomainString);
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DefaultInstance.DebugWriteln('Extra domain for component: ' + domain);
-{$ENDIF}
-        ComponentDomainListCS.BeginWrite;
-        try
-          if ComponentDomainList.IndexOf(domain) = -1 then
-            ComponentDomainList.Add(domain);
-        finally
-          ComponentDomainListCS.EndWrite;
-        end;
-      end;
-
-      procedure RemoveDomainForComponent(const domain: DomainString);
-      var
-        i: Integer;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DefaultInstance.DebugWriteln('Remove domain for component: ' + domain);
-{$ENDIF}
-        ComponentDomainListCS.BeginWrite;
-        try
-          i := ComponentDomainList.IndexOf(domain);
-          if i <> -1 then
-            ComponentDomainList.delete(i);
-        finally
-          ComponentDomainListCS.EndWrite;
-        end;
-      end;
-
-      procedure TDomain.SetLanguageCode(const langcode: LanguageString);
-      begin
-        CloseMoFile;
-        curlang := langcode;
-      end;
-
-      function GetPluralForm2EN(Number: Integer): Integer;
-      begin
-        Number := abs(Number);
-        if Number = 1 then
-          Result := 0
-        else
-          Result := 1;
-      end;
-
-      function GetPluralForm1(Number: Integer): Integer;
-      begin
-        Result := 0;
-      end;
-
-      function GetPluralForm2FR(Number: Integer): Integer;
-      begin
-        Number := abs(Number);
-        if (Number = 1) or (Number = 0) then
-          Result := 0
-        else
-          Result := 1;
-      end;
-
-      function GetPluralForm3LV(Number: Integer): Integer;
-      begin
-        Number := abs(Number);
-        if (Number mod 10 = 1) and (Number mod 100 <> 11) then
-          Result := 0
-        else if Number <> 0 then
-          Result := 1
-        else
-          Result := 2;
-      end;
-
-      function GetPluralForm3GA(Number: Integer): Integer;
-      begin
-        Number := abs(Number);
-        if Number = 1 then
-          Result := 0
-        else if Number = 2 then
-          Result := 1
-        else
-          Result := 2;
-      end;
-
-      function GetPluralForm3LT(Number: Integer): Integer;
-      var
-        n1, n2: byte;
-      begin
-        Number := abs(Number);
-        n1 := Number mod 10;
-        n2 := Number mod 100;
-        if (n1 = 1) and (n2 <> 11) then
-          Result := 0
-        else if (n1 >= 2) and ((n2 < 10) or (n2 >= 20)) then
-          Result := 1
-        else
-          Result := 2;
-      end;
-
-      function GetPluralForm3PL(Number: Integer): Integer;
-      var
-        n1, n2: byte;
-      begin
-        Number := abs(Number);
-        n1 := Number mod 10;
-        n2 := Number mod 100;
-
-        if Number = 1 then
-          Result := 0
-        else if (n1 >= 2) and (n1 <= 4) and ((n2 < 10) or (n2 >= 20)) then
-          Result := 1
-        else
-          Result := 2;
-      end;
-
-      function GetPluralForm3RU(Number: Integer): Integer;
-      var
-        n1, n2: byte;
-      begin
-        Number := abs(Number);
-        n1 := Number mod 10;
-        n2 := Number mod 100;
-        if (n1 = 1) and (n2 <> 11) then
-          Result := 0
-        else if (n1 >= 2) and (n1 <= 4) and ((n2 < 10) or (n2 >= 20)) then
-          Result := 1
-        else
-          Result := 2;
-      end;
-
-      function GetPluralForm3SK(Number: Integer): Integer;
-      begin
-        Number := abs(Number);
-        if Number = 1 then
-          Result := 0
-        else if (Number < 5) and (Number <> 0) then
-          Result := 1
-        else
-          Result := 2;
-      end;
-
-      function GetPluralForm4SL(Number: Integer): Integer;
-      var
-        n2: byte;
-      begin
-        Number := abs(Number);
-        n2 := Number mod 100;
-        if n2 = 1 then
-          Result := 0
-        else if n2 = 2 then
-          Result := 1
-        else if (n2 = 3) or (n2 = 4) then
-          Result := 2
-        else
-          Result := 3;
-      end;
-
-      procedure TDomain.GetListOfLanguages(list: TStrings);
-      var
-        sr: TSearchRec;
-        more: boolean;
-        filename, path: FilenameString;
-        langcode: LanguageString;
-        i, j: Integer;
-      begin
-        list.Clear;
-
-        // Iterate through filesystem
-        more := FindFirst(Directory + '*', faAnyFile, sr) = 0;
-        try
-          while more do
-          begin
-            if (sr.Attr and faDirectory <> 0) and (sr.name <> '.') and
-              (sr.name <> '..') then
-            begin
-              filename := Directory + sr.name + PathDelim + 'LC_MESSAGES' +
-                PathDelim + domain + '.mo';
-              if FileExists(filename) then
-              begin
-                langcode := lowercase(sr.name);
-                if list.IndexOf(langcode) = -1 then
-                  list.Add(langcode);
-              end;
-            end;
-            more := FindNext(sr) = 0;
-          end;
-        finally
-          FindClose(sr);
-        end;
-
-        // Iterate through embedded files
-        for i := 0 to FileLocator.filelist.Count - 1 do
-        begin
-          filename := FileLocator.basedirectory +
-            FileLocator.filelist.Strings[i];
-          path := Directory;
-{$IFDEF MSWINDOWS}
-          path := uppercase(path);
-          filename := uppercase(filename);
-{$ENDIF}
-          j := length(path);
-          if MidStr(filename, 1, j) = path then
-          begin
-            path := PathDelim + 'LC_MESSAGES' + PathDelim + domain + '.mo';
-{$IFDEF MSWINDOWS}
-            path := uppercase(path);
-{$ENDIF}
-            if MidStr(filename, length(filename) - length(path) + 1,
-              length(path)) = path then
-            begin
-              langcode :=
-                lowercase(MidStr(filename, j + 1,
-                length(filename) - length(path) - j));
-              langcode := LeftStr(langcode, 3) +
-                uppercase(MidStr(langcode, 4, maxint));
-              if list.IndexOf(langcode) = -1 then
-                list.Add(langcode);
-            end;
-          end;
-        end;
-      end;
-
-      procedure TDomain.SetFilename(const filename: FilenameString);
-      begin
-        CloseMoFile;
-        vDirectory := '';
-        SpecificFilename := filename;
-      end;
-
-      function TDomain.gettext(const msgid: RawUtf8String): RawUtf8String;
-      var
-        found: boolean;
-      begin
-        if not enabled then
-        begin
-          Result := msgid;
-          exit;
-        end;
-        if (mofile = nil) and (not OpenHasFailedBefore) then
-          OpenMoFile;
-        if mofile = nil then
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugLogger('.mo file is not open. Not translating "' + msgid + '"');
-{$ENDIF}
-          Result := msgid;
-        end
-        else
-        begin
-          Result := mofile.gettext(msgid, found);
-{$IFDEF DXGETTEXTDEBUG}
-          if found then
-            DebugLogger('Found in .mo (' + domain + '): "' + utf8encode(msgid) +
-              '"->"' + utf8encode(Result) + '"')
-          else
-            DebugLogger('Translation not found in .mo file (' + domain + ') : "'
-              + utf8encode(msgid) + '"');
-{$ENDIF}
-        end;
-      end;
-
-      constructor TDomain.Create;
-      begin
-        inherited Create;
-        enabled := True;
-      end;
-
-    { TGnuGettextInstance }
-
-      procedure TGnuGettextInstance.bindtextdomain(const szDomain: DomainString;
-        const szDirectory: FilenameString);
-      var
-        dir: FilenameString;
-      begin
-        dir := IncludeTrailingPathDelimiter(szDirectory);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Text domain "' + szDomain + '" is now located at "' +
-          dir + '"');
-{$ENDIF}
-        Getdomain(szDomain, DefaultDomainDirectory, curlang).Directory := dir;
-        WhenNewDomainDirectory(szDomain, szDirectory);
-      end;
-
-      constructor TGnuGettextInstance.Create;
-      begin
-{$IFDEF MSWindows}
-        DesignTimeCodePage := CP_ACP;
-{$ENDIF}
-{$IFDEF DXGETTEXTDEBUG}
-        DebugLogCS := TMultiReadExclusiveWriteSynchronizer.Create;
-        DebugLog := TMemoryStream.Create;
-        DebugWriteln('Debug log started ' + DateTimeToStr(Now));
-        DebugWriteln('GNU gettext module version: ' + VCSVersion);
-        DebugWriteln('');
-{$ENDIF}
-        curGetPluralForm := GetPluralForm2EN;
-        enabled := True;
-        curmsgdomain := DefaultTextDomain;
-        savefileCS := TMultiReadExclusiveWriteSynchronizer.Create;
-        domainlist := TStringList.Create;
-        TP_IgnoreList := TStringList.Create;
-        TP_IgnoreList.Sorted := True;
-        TP_GlobalClassHandling := TList.Create;
-        TP_ClassHandling := TList.Create;
-        fWhenNewLanguageListeners := TInterfaceList.Create;
-
-        // Set some settings
-        DefaultDomainDirectory := IncludeTrailingPathDelimiter
-          (extractfilepath(ExecutableFilename)) + 'locale';
-
-        UseLanguage('');
-
-        bindtextdomain(DefaultTextDomain, DefaultDomainDirectory);
-        textdomain(DefaultTextDomain);
-
-        // Add default properties to ignore
-        TP_GlobalIgnoreClassProperty(TComponent, 'Name');
-        TP_GlobalIgnoreClassProperty(TCollection, 'PropName');
-      end;
-
-      destructor TGnuGettextInstance.Destroy;
-      begin
-        if savememory <> nil then
-        begin
-          savefileCS.BeginWrite;
-          try
-            CloseFile(savefile);
-          finally
-            savefileCS.EndWrite;
-          end;
-          FreeAndNil(savememory);
-        end;
-        FreeAndNil(savefileCS);
-        FreeAndNil(TP_IgnoreList);
-        while TP_GlobalClassHandling.Count <> 0 do
-        begin
-          TObject(TP_GlobalClassHandling.Items[0]).Free;
-          TP_GlobalClassHandling.delete(0);
-        end;
-        FreeAndNil(TP_GlobalClassHandling);
-        FreeTP_ClassHandlingItems;
-        FreeAndNil(TP_ClassHandling);
-        while domainlist.Count <> 0 do
-        begin
-          domainlist.Objects[0].Free;
-          domainlist.delete(0);
-        end;
-        FreeAndNil(domainlist);
-        fWhenNewLanguageListeners.Free;
-{$IFDEF DXGETTEXTDEBUG}
-        FreeAndNil(DebugLog);
-        FreeAndNil(DebugLogCS);
-{$ENDIF}
-        inherited;
-      end;
-
-{$IFNDEF UNICODE}
-      function TGnuGettextInstance.dgettext(const szDomain: DomainString;
-        const szMsgId: AnsiString): TranslatedUnicodeString;
-      begin
-        Result := dgettext(szDomain, ansi2wideDTCP(szMsgId));
-      end;
-{$ENDIF}
-      function TGnuGettextInstance.dgettext(const szDomain: DomainString;
-        const szMsgId: MsgIdString): TranslatedUnicodeString;
-      begin
-        if not enabled then
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('Translation has been disabled. Text is not being translated: '
-            + szMsgId);
-{$ENDIF}
-          Result := szMsgId;
-        end
-        else
-        begin
-          Result := utf8decode(EnsureLineBreakInTranslatedString
-            (Getdomain(szDomain, DefaultDomainDirectory, curlang)
-            .gettext(StripCRRawMsgId(utf8encode(szMsgId)))));
-
-{$IFDEF DXGETTEXTDEBUG}
-          if (szMsgId <> '') and (Result = '') then
-            DebugWriteln
-              (Format('Error: Translation of %s was an empty string. This may never occur.',
-              [szMsgId]));
-{$ENDIF}
-        end;
-      end;
-
-      function TGnuGettextInstance.dgettext_NoExtract(const szDomain
-        : DomainString; const szMsgId: MsgIdString): TranslatedUnicodeString;
-      begin
-        // This one is very useful for translating text in variables.
-        // This can sometimes be necessary, and by using this function,
-        // the source code scanner will not trigger warnings.
-        Result := dgettext(szDomain, szMsgId);
-      end;
-
-      function TGnuGettextInstance.GetCurrentLanguage: LanguageString;
-      begin
-        Result := curlang;
-      end;
-
-      function TGnuGettextInstance.getcurrenttextdomain: DomainString;
-      begin
-        Result := curmsgdomain;
-      end;
-
-{$IFNDEF UNICODE}
-      function TGnuGettextInstance.gettext(const szMsgId: AnsiString)
-        : TranslatedUnicodeString;
-      begin
-        Result := dgettext(curmsgdomain, szMsgId);
-      end;
-{$ENDIF}
-      function TGnuGettextInstance.gettext(const szMsgId: MsgIdString)
-        : TranslatedUnicodeString;
-      begin
-        Result := dgettext(curmsgdomain, szMsgId);
-      end;
-
-      function TGnuGettextInstance.gettext_NoExtract(const szMsgId: MsgIdString)
-        : TranslatedUnicodeString;
-      begin
-        // This one is very useful for translating text in variables.
-        // This can sometimes be necessary, and by using this function,
-        // the source code scanner will not trigger warnings.
-        Result := gettext(szMsgId);
-      end;
-
-      function TGnuGettextInstance.gettext_NoOp(const szMsgId: MsgIdString)
-        : TranslatedUnicodeString;
-      begin
-        // *** With this function Strings can be added to the po-file without beeing
-        // ResourceStrings (dxgettext will add the string and this function will
-        // return it without a change)
-        // see gettext manual
-        // 4.7 - Special Cases of Translatable Strings
-        // http://www.gnu.org/software/hello/manual/gettext/Special-cases.html#Special-cases
-        Result := TranslatedUnicodeString(szMsgId);
-      end;
-
-      procedure TGnuGettextInstance.textdomain(const szDomain: DomainString);
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Changed text domain to "' + szDomain + '"');
-{$ENDIF}
-        curmsgdomain := szDomain;
-        WhenNewDomain(szDomain);
-      end;
-
-      function TGnuGettextInstance.TP_CreateRetranslator: TExecutable;
-      var
-        ttpr: TTP_Retranslator;
-      begin
-        ttpr := TTP_Retranslator.Create;
-        ttpr.Instance := self;
-        TP_Retranslator := ttpr;
-        Result := ttpr;
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('A retranslator was created.');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TP_GlobalHandleClass(HClass: TClass;
-        Handler: TTranslator);
-      var
-        cm: TClassMode;
-        i: Integer;
-      begin
-        for i := 0 to TP_GlobalClassHandling.Count - 1 do
-        begin
-          cm := TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-          if cm.HClass = HClass then
-            raise EGGProgrammingError.Create
-              ('You cannot set a handler for a class that has already been assigned otherwise.');
-          if HClass.InheritsFrom(cm.HClass) then
-          begin
-            // This is the place to insert this class
-            cm := TClassMode.Create;
-            cm.HClass := HClass;
-            cm.SpecialHandler := Handler;
-            TP_GlobalClassHandling.insert(i, cm);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('A handler was set for class ' +
-              HClass.ClassName + '.');
-{$ENDIF}
-            exit;
-          end;
-        end;
-        cm := TClassMode.Create;
-        cm.HClass := HClass;
-        cm.SpecialHandler := Handler;
-        TP_GlobalClassHandling.Add(cm);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('A handler was set for class ' + HClass.ClassName + '.');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TP_GlobalIgnoreClass(IgnClass: TClass);
-      var
-        cm: TClassMode;
-        i: Integer;
-      begin
-        for i := 0 to TP_GlobalClassHandling.Count - 1 do
-        begin
-          cm := TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-          if cm.HClass = IgnClass then
-            raise EGGProgrammingError.Create
-              ('You cannot add a class to the ignore list that is already on that list: '
-              + IgnClass.ClassName +
-              '. You should keep all TP_Global functions in one place in your source code.');
-          if IgnClass.InheritsFrom(cm.HClass) then
-          begin
-            // This is the place to insert this class
-            cm := TClassMode.Create;
-            cm.HClass := IgnClass;
-            TP_GlobalClassHandling.insert(i, cm);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Globally, class ' + IgnClass.ClassName +
-              ' is being ignored.');
-{$ENDIF}
-            exit;
-          end;
-        end;
-        cm := TClassMode.Create;
-        cm.HClass := IgnClass;
-        TP_GlobalClassHandling.Add(cm);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Globally, class ' + IgnClass.ClassName +
-          ' is being ignored.');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TP_GlobalIgnoreClassProperty
-        (IgnClass: TClass; propertyname: ComponentNameString);
-      var
-        cm: TClassMode;
-        i, idx: Integer;
-      begin
-        propertyname := uppercase(propertyname);
-        for i := 0 to TP_GlobalClassHandling.Count - 1 do
-        begin
-          cm := TObject(TP_GlobalClassHandling.Items[i]) as TClassMode;
-          if cm.HClass = IgnClass then
-          begin
-            if Assigned(cm.SpecialHandler) then
-              raise EGGProgrammingError.Create
-                ('You cannot ignore a class property for a class that has a handler set.');
-            if not cm.PropertiesToIgnore.Find(propertyname, idx) then
-              cm.PropertiesToIgnore.Add(propertyname);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Globally, the ' + propertyname + ' property of class '
-              + IgnClass.ClassName + ' is being ignored.');
-{$ENDIF}
-            exit;
-          end;
-          if IgnClass.InheritsFrom(cm.HClass) then
-          begin
-            // This is the place to insert this class
-            cm := TClassMode.Create;
-            cm.HClass := IgnClass;
-            cm.PropertiesToIgnore.Add(propertyname);
-            TP_GlobalClassHandling.insert(i, cm);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Globally, the ' + propertyname + ' property of class '
-              + IgnClass.ClassName + ' is being ignored.');
-{$ENDIF}
-            exit;
-          end;
-        end;
-        cm := TClassMode.Create;
-        cm.HClass := IgnClass;
-        cm.PropertiesToIgnore.Add(propertyname);
-        TP_GlobalClassHandling.Add(cm);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Globally, the ' + propertyname + ' property of class ' +
-          IgnClass.ClassName + ' is being ignored.');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TP_Ignore(AnObject: TObject;
-        const name: ComponentNameString);
-      begin
-        TP_IgnoreList.Add(uppercase(name));
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('On object with class name ' + AnObject.ClassName +
-          ', ignore is set on ' + name);
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TranslateComponent(AnObject: TComponent;
-        const textdomain: DomainString);
-      var
-        comp: TGnuGettextComponentMarker;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln
-          ('======================================================================');
-        DebugWriteln
-          ('TranslateComponent() was called for a component with name ' +
-          AnObject.name + '.');
-{$ENDIF}
-        comp := AnObject.FindComponent('GNUgettextMarker')
-          as TGnuGettextComponentMarker;
-        if comp = nil then
-        begin
-          comp := TGnuGettextComponentMarker.Create(nil);
-          comp.name := 'GNUgettextMarker';
-          comp.Retranslator := TP_CreateRetranslator;
-          TranslateProperties(AnObject, textdomain);
-          AnObject.InsertComponent(comp);
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('This is the first time, that this component has been translated. A retranslator component has been created for this component.');
-{$ENDIF}
-        end
-        else
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('This is not the first time, that this component has been translated.');
-{$ENDIF}
-          if comp.LastLanguage <> curlang then
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln
-              ('ERROR: TranslateComponent() was called twice with different languages. This indicates an attempt to switch language at runtime, but by using TranslateComponent every time. This API has changed - please use RetranslateComponent() instead.');
-{$ENDIF}
-{$IFDEF mswindows}
-            MessageBox(0,
-              'This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information.',
-              'Error', MB_OK);
-{$ELSE}
-            writeln(stderr,
-              'This application tried to switch the language, but in an incorrect way. The programmer needs to replace a call to TranslateComponent with a call to RetranslateComponent(). The programmer should see the changelog of gnugettext.pas for more information.');
-{$ENDIF}
-          end
-          else
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln
-              ('ERROR: TranslateComponent has been called twice, but with the same language chosen. This is a mistake, but in order to prevent that the application breaks, no exception is raised.');
-{$ENDIF}
-          end;
-        end;
-        comp.LastLanguage := curlang;
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln
-          ('======================================================================');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TranslateProperty(AnObject: TObject;
-        PropInfo: PPropInfo; TodoList: TStrings;
-        const textdomain: DomainString);
-      var
-        ppi: PPropInfo;
-        ws: TranslatedUnicodeString;
-        old: TranslatedUnicodeString;
-        compmarker: TComponent;
-        obj: TObject;
-        Propname: ComponentNameString;
-      begin
-        Propname := string(PropInfo^.name);
-        try
-          // Translate certain types of properties
-          case PropInfo^.PropType^.Kind of
-{$IFDEF UNICODE}
-            // All dfm files returning tkUString
-            tkString, tkLString, tkWString, tkUString:
-{$ELSE}
-            tkString, tkLString, tkWString:
-{$ENDIF}
-              begin
-                // prevent items in RadioGroup from duplicate translation - JR - 2011-07-29
-                if AnObject.ClassName = 'TGroupButton' then
-                  exit;
-{$IFDEF DXGETTEXTDEBUG}
-                if AnObject is TComponent then
-                  DebugWriteln('Translating ' + AnObject.ClassName + '.' +
-                    Propname + ' (' + TComponent(AnObject).name + ')')
-                else
-                  DebugWriteln('Translating ' + AnObject.ClassName + '.' +
-                    Propname);;
-{$ENDIF}
-                case PropInfo^.PropType^.Kind of
-                  tkString, tkLString:
-                    old := GetStrProp(AnObject, Propname);
-                  tkWString:
-                    old := GetWideStrProp(AnObject, Propname);
-{$IFDEF UNICODE}
-                  tkUString:
-                    old := GetUnicodeStrProp(AnObject, Propname);
-{$ENDIF}
-                else
-                  raise Exception.Create
-                    ('Internal error: Illegal property type. This problem needs to be solved by a programmer, try to find a workaround.');
-                end;
-{$IFDEF DXGETTEXTDEBUG}
-                if old = '' then
-                  DebugWriteln('(Empty, not translated)')
-                else
-                  DebugWriteln('Old value: "' + old + '"');
-{$ENDIF}
-                if (old <> '') and (IsWriteProp(PropInfo)) then
-                begin
-                  if TP_Retranslator <> nil then
-                    (TP_Retranslator as TTP_Retranslator)
-                      .Remember(AnObject, Propname, old);
-                  if textdomain = '' then
-                    ws := ComponentGettext(old)
-                  else
-                    ws := dgettext(textdomain, old);
-                  if ws <> old then
-                  begin
-                    ppi := GetPropInfo(AnObject, Propname);
-                    if ppi <> nil then
-                    begin
-                      SetWideStrProp(AnObject, ppi, ws);
-                    end
-                    else
-                    begin
-{$IFDEF DXGETTEXTDEBUG}
-                      DebugWriteln('ERROR: Property disappeared: ' + Propname +
-                        ' for object of type ' + AnObject.ClassName);
-{$ENDIF}
-                    end;
-                  end;
-                end;
-              end { case item };
-            tkClass:
-              begin
-                obj := GetObjectProp(AnObject, Propname);
-                if obj <> nil then
-                begin
-                  if obj is TComponent then
-                  begin
-                    compmarker := TComponent(obj)
-                      .FindComponent('GNUgettextMarker');
-                    if Assigned(compmarker) then
-                      exit;
-                  end;
-                  TodoList.AddObject('', obj);
-                end;
-              end { case item };
-          end { case };
-        except
-          on E: Exception do
-            raise EGGComponentError.Create('Property cannot be translated.' +
-              sLinebreak + 'Add TP_GlobalIgnoreClassProperty(' +
-              AnObject.ClassName + ',''' + Propname +
-              ''') to your source code or use' + sLinebreak +
-              'TP_Ignore (self,''.' + Propname + ''') to prevent this message.'
-              + sLinebreak + 'Reason: ' + E.Message);
-        end;
-      end;
-
-      procedure TGnuGettextInstance.TranslateProperties(AnObject: TObject;
-        textdomain: DomainString = '');
-      var
-        TodoList: TStringList; // List of Name/TObject's that is to be processed
-        DoneList: TStringList;
-        // List of hex codes representing pointers to objects that have been done
-        i, j, Count: Integer;
-        PropList: PPropList;
-        UPropName: ComponentNameString;
-        PropInfo: PPropInfo;
-        compmarker, comp: TComponent;
-        cm, currentcm: TClassMode;
-        // currentcm is nil or contains special information about how to handle the current object
-        ObjectPropertyIgnoreList: TStringList;
-        objid: string;
-        name: ComponentNameString;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln
-          ('----------------------------------------------------------------------');
-        DebugWriteln('TranslateProperties() was called for an object of class '
-          + AnObject.ClassName + ' with domain "' + textdomain + '".');
-{$ENDIF}
-        if TP_Retranslator <> nil then
-          if textdomain = '' then
-            (TP_Retranslator as TTP_Retranslator).textdomain := curmsgdomain
-          else
-            (TP_Retranslator as TTP_Retranslator).textdomain := textdomain;
-{$IFDEF FPC}
-        DoneList := TCSStringList.Create;
-        TodoList := TCSStringList.Create;
-        ObjectPropertyIgnoreList := TCSStringList.Create;
-{$ELSE}
-        DoneList := TStringList.Create;
-        TodoList := TStringList.Create;
-        ObjectPropertyIgnoreList := TStringList.Create;
-{$ENDIF}
-        try
-          TodoList.AddObject('', AnObject);
-          DoneList.Sorted := True;
-          ObjectPropertyIgnoreList.Sorted := True;
-          ObjectPropertyIgnoreList.Duplicates := dupIgnore;
-          ObjectPropertyIgnoreList.CaseSensitive := false;
-          DoneList.Duplicates := dupError;
-          DoneList.CaseSensitive := True;
-
-          while TodoList.Count <> 0 do
-          begin
-            AnObject := TodoList.Objects[0];
-            Name := TodoList.Strings[0];
-            TodoList.delete(0);
-            if (AnObject <> nil) and (AnObject is TPersistent) then
-            begin
-              // Make sure each object is only translated once
-              Assert(SizeOf({$IFDEF CPUx64}NativeInt{$ELSE}Integer{$ENDIF CPUx64}) = SizeOf(TObject));
-              objid := IntToHex
-                ({$IFDEF CPUx64}NativeInt{$ELSE}Integer{$ENDIF CPUx64}(AnObject), 8);
-              if DoneList.Find(objid, i) then
-              begin
-                continue;
-              end
-              else
-              begin
-                DoneList.Add(objid);
-              end;
-
-              ObjectPropertyIgnoreList.Clear;
-
-              // Find out if there is special handling of this object
-              currentcm := nil;
-              // First check the local handling instructions
-              for j := 0 to TP_ClassHandling.Count - 1 do
-              begin
-                cm := TObject(TP_ClassHandling.Items[j]) as TClassMode;
-                if AnObject.InheritsFrom(cm.HClass) then
-                begin
-                  if cm.PropertiesToIgnore.Count <> 0 then
-                  begin
-                    ObjectPropertyIgnoreList.AddStrings(cm.PropertiesToIgnore);
-                  end
-                  else
-                  begin
-                    // Ignore the entire class
-                    currentcm := cm;
-                    break;
-                  end;
-                end;
-              end;
-              // Then check the global handling instructions
-              if currentcm = nil then
-                for j := 0 to TP_GlobalClassHandling.Count - 1 do
-                begin
-                  cm := TObject(TP_GlobalClassHandling.Items[j]) as TClassMode;
-                  if AnObject.InheritsFrom(cm.HClass) then
-                  begin
-                    if cm.PropertiesToIgnore.Count <> 0 then
-                    begin
-                      ObjectPropertyIgnoreList.AddStrings
-                        (cm.PropertiesToIgnore);
-                    end
-                    else
-                    begin
-                      // Ignore the entire class
-                      currentcm := cm;
-                      break;
-                    end;
-                  end;
-                end;
-              if currentcm <> nil then
-              begin
-                ObjectPropertyIgnoreList.Clear;
-                // Ignore or use special handler
-                if Assigned(currentcm.SpecialHandler) then
-                begin
-                  currentcm.SpecialHandler(AnObject);
-{$IFDEF DXGETTEXTDEBUG}
-                  DebugWriteln('Special handler activated for ' +
-                    AnObject.ClassName);
-{$ENDIF}
-                end
-                else
-                begin
-{$IFDEF DXGETTEXTDEBUG}
-                  DebugWriteln('Ignoring object ' + AnObject.ClassName);
-{$ENDIF}
-                end;
-                continue;
-              end;
-
-              Count := GetPropList(AnObject, PropList);
-              try
-                for j := 0 to Count - 1 do
-                begin
-                  PropInfo := PropList[j];
-{$IFDEF UNICODE}
-                  if not(PropInfo^.PropType^.Kind in [tkString, tkLString,
-                    tkWString, tkClass, tkUString]) then
-{$ELSE}
-                  if not(PropInfo^.PropType^.Kind in [tkString, tkLString,
-                    tkWString, tkClass]) then
-{$ENDIF}
-                    continue;
-                  UPropName := uppercase(string(PropInfo^.name));
-                  // Ignore properties that are meant to be ignored
-                  if ((currentcm = nil) or
-                    (not currentcm.PropertiesToIgnore.Find(UPropName, i))) and
-                    (not TP_IgnoreList.Find(Name + '.' + UPropName, i)) and
-                    (not ObjectPropertyIgnoreList.Find(UPropName, i)) then
-                  begin
-                    TranslateProperty(AnObject, PropInfo, TodoList, textdomain);
-                  end; // if
-                end; // for
-              finally
-                if Count <> 0 then
-                  FreeMem(PropList);
-              end;
-              if AnObject is TStrings then
-              begin
-                if ((AnObject as TStrings).Text <> '') and
-                  (TP_Retranslator <> nil) then
-                  (TP_Retranslator as TTP_Retranslator)
-                    .Remember(AnObject, 'Text', (AnObject as TStrings).Text);
-                TranslateStrings(AnObject as TStrings, textdomain);
-              end;
-              // Check for TCollection
-              if AnObject is TCollection then
-              begin
-                for i := 0 to (AnObject as TCollection).Count - 1 do
-                begin
-                  // Only add the object if it's not totally ignored already
-                  if not Assigned(currentcm) or
-                    not AnObject.InheritsFrom(currentcm.HClass) then
-                    TodoList.AddObject('', (AnObject as TCollection).Items[i]);
-                end;
-              end;
-              if AnObject is TComponent then
-              begin
-                for i := 0 to TComponent(AnObject).ComponentCount - 1 do
-                begin
-                  comp := TComponent(AnObject).Components[i];
-                  if (not TP_IgnoreList.Find(uppercase(comp.name), j)) then
-                  begin
-                    // Only add the object if it's not totally ignored or translated already
-                    if not Assigned(currentcm) or
-                      not AnObject.InheritsFrom(currentcm.HClass) then
-                    begin
-                      compmarker := comp.FindComponent('GNUgettextMarker');
-                      if not Assigned(compmarker) then
-                        TodoList.AddObject(uppercase(comp.name), comp);
-                    end;
-                  end;
-                end;
-              end;
-            end { if AnObject<>nil };
-          end { while todolist.count<>0 };
-        finally
-          FreeAndNil(TodoList);
-          FreeAndNil(ObjectPropertyIgnoreList);
-          FreeAndNil(DoneList);
-        end;
-        FreeTP_ClassHandlingItems;
-        TP_IgnoreList.Clear;
-        TP_Retranslator := nil;
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln
-          ('----------------------------------------------------------------------');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.UnregisterWhenNewLanguageListener
-        (Listener: IGnuGettextInstanceWhenNewLanguageListener);
-      begin
-        fWhenNewLanguageListeners.Remove(Listener);
-      end;
-
-      procedure TGnuGettextInstance.UseLanguage(LanguageCode: LanguageString);
-      var
-        i, p: Integer;
-        dom: TDomain;
-        l2: string;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('UseLanguage(''' + LanguageCode + '''); called');
-{$ENDIF}
-        if LanguageCode = '' then
-        begin
-          LanguageCode := GGGetEnvironmentVariable('LANG');
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln('LANG env variable is ''' + LanguageCode + '''.');
-{$ENDIF}
-{$IFDEF MSWINDOWS}
-          if LanguageCode = '' then
-          begin
-            LanguageCode := GetWindowsLanguage;
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Found Windows language code to be ''' +
-              LanguageCode + '''.');
-{$ENDIF}
-          end;
-{$ENDIF}
-          p := pos('.', LanguageCode);
-          if p <> 0 then
-            LanguageCode := LeftStr(LanguageCode, p - 1);
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln('Language code that will be set is ''' +
-            LanguageCode + '''.');
-{$ENDIF}
-        end;
-
-        curlang := LanguageCode;
-        for i := 0 to domainlist.Count - 1 do
-        begin
-          dom := domainlist.Objects[i] as TDomain;
-          dom.SetLanguageCode(curlang);
-        end;
-
-        l2 := lowercase(LeftStr(curlang, 2));
-        if (l2 = 'en') or (l2 = 'de') then
-          curGetPluralForm := GetPluralForm2EN
-        else if (l2 = 'hu') or (l2 = 'ko') or (l2 = 'zh') or (l2 = 'ja') or
-          (l2 = 'tr') then
-          curGetPluralForm := GetPluralForm1
-        else if (l2 = 'fr') or (l2 = 'fa') or (lowercase(curlang) = 'pt_br')
-        then
-          curGetPluralForm := GetPluralForm2FR
-        else if (l2 = 'lv') then
-          curGetPluralForm := GetPluralForm3LV
-        else if (l2 = 'ga') then
-          curGetPluralForm := GetPluralForm3GA
-        else if (l2 = 'lt') then
-          curGetPluralForm := GetPluralForm3LT
-        else if (l2 = 'ru') or (l2 = 'uk') or (l2 = 'hr') then
-          curGetPluralForm := GetPluralForm3RU
-        else if (l2 = 'cs') or (l2 = 'sk') then
-          curGetPluralForm := GetPluralForm3SK
-        else if (l2 = 'pl') then
-          curGetPluralForm := GetPluralForm3PL
-        else if (l2 = 'sl') then
-          curGetPluralForm := GetPluralForm4SL
-        else
-        begin
-          curGetPluralForm := GetPluralForm2EN;
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('Plural form for the language was not found. English plurality system assumed.');
-{$ENDIF}
-        end;
-
-        WhenNewLanguage(curlang);
-
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TranslateStrings(sl: TStrings;
-        const textdomain: DomainString);
-      var
-        Line: string;
-        i: Integer;
-        s: TStringList;
-        slAsTStringList: TStringList;
-        originalOwnsObjects: boolean;
-      begin
-        if sl.Count > 0 then
-        begin
-          // From D2009 onward, the TStringList class has a OwnsObjects property, just like
-          // TObjectList has. This means that when we will be calling Clear on the given
-          // list in the sl parameter, we could destroy the objects it contains.
-          // To avoid this we must disable OwnsObjects while we replace the strings, but
-          // only if sl is a TStringList instance and if using Delphi 2009 or upper.
-          originalOwnsObjects := false; // avoid warning
-          if sl is TStringList then
-            slAsTStringList := TStringList(sl)
-          else
-            slAsTStringList := nil;
-
-          sl.BeginUpdate;
-          try
-            s := TStringList.Create;
-            try
-              // don't use Assign here as it will propagate the Sorted property (among others)
-              // in versions of Delphi from Delphi XE ownard
-              s.AddStrings(sl);
-
-              for i := 0 to s.Count - 1 do
-              begin
-                Line := s.Strings[i];
-                if Line <> '' then
-                  if textdomain = '' then
-                    s.Strings[i] := ComponentGettext(Line)
-                  else
-                    s.Strings[i] := dgettext(textdomain, Line);
-              end;
-
-              if Assigned(slAsTStringList) then
-              begin
-                originalOwnsObjects := slAsTStringList.OwnsObjects;
-                slAsTStringList.OwnsObjects := false;
-              end;
-              try
-                // same here, we don't want to modify the properties of the orignal string list
-                sl.Clear;
-                sl.AddStrings(s);
-              finally
-                if Assigned(slAsTStringList) then
-                  slAsTStringList.OwnsObjects := originalOwnsObjects;
-              end;
-            finally
-              FreeAndNil(s);
-            end;
-          finally
-            sl.EndUpdate;
-          end;
-        end;
-      end;
-
-      function TGnuGettextInstance.GetTranslatorNameAndEmail
-        : TranslatedUnicodeString;
-      begin
-        Result := GetTranslationProperty('LAST-TRANSLATOR');
-      end;
-
-      function TGnuGettextInstance.GetTranslationProperty(const propertyname
-        : ComponentNameString): TranslatedUnicodeString;
-      begin
-        Result := Getdomain(curmsgdomain, DefaultDomainDirectory, curlang)
-          .GetTranslationProperty(propertyname);
-      end;
-
-      function TGnuGettextInstance.dngettext(const szDomain: DomainString;
-        const singular, plural: MsgIdString; Number: Integer)
-        : TranslatedUnicodeString;
-      var
-        org: MsgIdString;
-        trans: TranslatedUnicodeString;
-        idx: Integer;
-        p: Integer;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('dngettext translation (domain ' + szDomain +
-          ', number is ' + IntToStr(Number) + ') of ' + singular + '/'
-          + plural);
-{$ENDIF}
-        org := singular + #0 + plural;
-        trans := dgettext(szDomain, org);
-        if org = trans then
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('Translation was equal to english version. English plural forms assumed.');
-{$ENDIF}
-          idx := GetPluralForm2EN(Number)
-        end
-        else
-          idx := curGetPluralForm(Number);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Index ' + IntToStr(idx) + ' will be used');
-{$ENDIF}
-        while True do
-        begin
-          p := pos(#0, trans);
-          if p = 0 then
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Last translation used: ' + utf8encode(trans));
-{$ENDIF}
-            Result := trans;
-            exit;
-          end;
-          if idx = 0 then
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Translation found: ' + utf8encode(trans));
-{$ENDIF}
-            Result := LeftStr(trans, p - 1);
-            exit;
-          end;
-          delete(trans, 1, p);
-          dec(idx);
-        end;
-      end;
-
-      function TGnuGettextInstance.dngettext_NoExtract(const szDomain
-        : DomainString; const singular, plural: MsgIdString; Number: Integer)
-        : TranslatedUnicodeString;
-      begin
-        // This one is very useful for translating text in variables.
-        // This can sometimes be necessary, and by using this function,
-        // the source code scanner will not trigger warnings.
-        Result := dngettext(szDomain, singular, plural, Number);
-      end;
-
-{$IFNDEF UNICODE}
-      function TGnuGettextInstance.ngettext(const singular, plural: AnsiString;
-        Number: Integer): TranslatedUnicodeString;
-      begin
-        Result := dngettext(curmsgdomain, singular, plural, Number);
-      end;
-{$ENDIF}
-      function TGnuGettextInstance.ngettext(const singular, plural: MsgIdString;
-        Number: Integer): TranslatedUnicodeString;
-      begin
-        Result := dngettext(curmsgdomain, singular, plural, Number);
-      end;
-
-      function TGnuGettextInstance.ngettext_NoExtract(const singular,
-        plural: MsgIdString; Number: Integer): TranslatedUnicodeString;
-      begin
-        // This one is very useful for translating text in variables.
-        // This can sometimes be necessary, and by using this function,
-        // the source code scanner will not trigger warnings.
-        Result := ngettext(singular, plural, Number);
-      end;
-
-      procedure TGnuGettextInstance.WhenNewDomain(const textdomain
-        : DomainString);
-      begin
-        // This is meant to be empty.
-      end;
-
-      procedure TGnuGettextInstance.WhenNewLanguage(const LanguageID
-        : LanguageString);
-      var
-        i: Integer;
-      begin
-        for i := 0 to fWhenNewLanguageListeners.Count - 1 do
-          IGnuGettextInstanceWhenNewLanguageListener
-            (fWhenNewLanguageListeners[i]).WhenNewLanguage(LanguageID);
-      end;
-
-      procedure TGnuGettextInstance.WhenNewDomainDirectory(const textdomain
-        : DomainString; const Directory: FilenameString);
-      begin
-        // This is meant to be empty.
-      end;
-
-      procedure TGnuGettextInstance.GetListOfLanguages
-        (const domain: DomainString; list: TStrings);
-      begin
-        Getdomain(domain, DefaultDomainDirectory, curlang)
-          .GetListOfLanguages(list);
-      end;
-
-      procedure TGnuGettextInstance.bindtextdomainToFile(const szDomain
-        : DomainString; const filename: FilenameString);
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Text domain "' + szDomain +
-          '" is now bound to file named "' + filename + '"');
-{$ENDIF}
-        Getdomain(szDomain, DefaultDomainDirectory, curlang)
-          .SetFilename(filename);
-      end;
-
-      procedure TGnuGettextInstance.DebugLogPause(PauseEnabled: boolean);
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugLogOutputPaused := PauseEnabled;
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.DebugLogToFile(const filename
-        : FilenameString; append: boolean = false);
-{$IFDEF DXGETTEXTDEBUG}
-      var
-        fs: TFileStream;
-        marker: AnsiString;
-{$ENDIF}
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        // Create the file if needed
-        if (not FileExists(filename)) or (not append) then
-          fileclose(filecreate(filename));
-
-        // Open file
-        fs := TFileStream.Create(filename, fmOpenWrite or fmShareDenyWrite);
-        if append then
-          fs.Seek(0, soFromEnd);
-
-        // Write header if appending
-        if fs.Position <> 0 then
-        begin
-          marker := sLinebreak +
-            '==========================================================================='
-            + sLinebreak;
-          fs.WriteBuffer(marker[1], length(marker));
-        end;
-
-        // Copy the memorystream contents to the file
-        if DebugLog <> nil then
-        begin
-          DebugLog.Seek(0, soFromBeginning);
-          fs.CopyFrom(DebugLog, 0);
-        end;
-
-        // Make DebugLog point to the filestream
-        FreeAndNil(DebugLog);
-        DebugLog := fs;
-{$ENDIF}
-      end;
-
-{$IFDEF DXGETTEXTDEBUG}
-      procedure TGnuGettextInstance.DebugWriteln(Line: AnsiString);
-      Var
-        Discard: boolean;
-      begin
-        Assert(DebugLogCS <> nil);
-        Assert(DebugLog <> nil);
-
-        DebugLogCS.BeginWrite;
-        try
-          if DebugLogOutputPaused then
-            exit;
-
-          if Assigned(fOnDebugLine) then
-          begin
-            Discard := True;
-            fOnDebugLine(self, Line, Discard);
-            If Discard then
-              exit;
-          end;
-
-          Line := Line + sLinebreak;
-
-          // Ensure that memory usage doesn't get too big.
-          if (DebugLog is TMemoryStream) and (DebugLog.Position > 1000000) then
-          begin
-            Line := sLinebreak + sLinebreak + sLinebreak + sLinebreak +
-              sLinebreak +
-              'Debug log halted because memory usage grew too much.' +
-              sLinebreak +
-              'Specify a filename to store the debug log in or disable debug loggin in gnugettext.pas.'
-              + sLinebreak + sLinebreak + sLinebreak + sLinebreak + sLinebreak;
-            DebugLogOutputPaused := True;
-          end;
-          DebugLog.WriteBuffer(Line[1], length(Line));
-        finally
-          DebugLogCS.EndWrite;
-        end;
-      end;
-{$ENDIF}
-      function TGnuGettextInstance.Getdomain(const domain: DomainString;
-        const DefaultDomainDirectory: FilenameString;
-        const curlang: LanguageString): TDomain;
-      // Retrieves the TDomain object for the specified domain.
-      // Creates one, if none there, yet.
-      var
-        idx: Integer;
-      begin
-        idx := domainlist.IndexOf(domain);
-        if idx = -1 then
-        begin
-          Result := TDomain.Create;
-{$IFDEF DXGETTEXTDEBUG}
-          Result.DebugLogger := DebugWriteln;
-{$ENDIF}
-          Result.domain := domain;
-          Result.Directory := DefaultDomainDirectory;
-          Result.SetLanguageCode(curlang);
-          domainlist.AddObject(domain, Result);
-        end
-        else
-        begin
-          Result := domainlist.Objects[idx] as TDomain;
-        end;
-      end;
-
-      function TGnuGettextInstance.LoadResString(ResStringRec: PResStringRec)
-        : UnicodeString;
-{$IFDEF MSWINDOWS}
-      var
-        Len: Integer;
-{$IFDEF UNICODE}
-        Buffer: array [0 .. 1023] of widechar;
-{$ELSE}
-        Buffer: array [0 .. 1023] of ansichar;
-{$ENDIF}
-{$ENDIF}
-{$IFDEF LINUX }
-      const
-        ResStringTableLen = 16;
-      type
-        ResStringTable = array [0 .. ResStringTableLen - 1] of LongWord;
-      var
-        Handle: TResourceHandle;
-        Tab: ^ResStringTable;
-        ResMod: HModule;
-{$ENDIF }
-      begin
-        if ResStringRec = nil then
-          exit;
-        if ResStringRec.Identifier >= 64 * 1024 then
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('LoadResString was given an invalid ResStringRec.Identifier');
-{$ENDIF}
-          Result := 'ERROR';
-          exit;
-        end
-        else
-        begin
-{$IFDEF LINUX}
-          // This works with Unicode if the Linux has utf-8 character set
-          // Result:=System.LoadResString(ResStringRec);
-          ResMod := FindResourceHInstance(ResStringRec^.Module^);
-          Handle := FindResource(ResMod,
-            PAnsiChar(ResStringRec^.Identifier div ResStringTableLen),
-            PAnsiChar(6)); // RT_STRING
-          Tab := pointer(LoadResource(ResMod, Handle));
-          if Tab = nil then
-            Result := ''
-          else
-            Result := PWideChar(PAnsiChar(Tab) +
-              Tab[ResStringRec^.Identifier mod ResStringTableLen]);
-{$ENDIF}
-{$IFDEF MSWINDOWS}
-          if not Win32PlatformIsUnicode then
-          begin
-            SetString(Result, Buffer,
-              LoadString(FindResourceHInstance(ResStringRec.Module^),
-              ResStringRec.Identifier, Buffer, SizeOf(Buffer)))
-          end
-          else
-          begin
-            Result := '';
-            Len := 0;
-            While length(Result) <= Len + 1 do
-            begin
-              if length(Result) = 0 then
-                SetLength(Result, 1024)
-              else
-                SetLength(Result, length(Result) * 2);
-              Len := LoadStringW(FindResourceHInstance(ResStringRec.Module^),
-                ResStringRec.Identifier, PWideChar(Result), length(Result));
-            end;
-            SetLength(Result, Len);
-          end;
-{$ENDIF}
-        end;
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Loaded resourcestring: ' + utf8encode(Result));
-{$ENDIF}
-        Result := ResourceStringGettext(Result);
-      end;
-
-      procedure TGnuGettextInstance.RegisterWhenNewLanguageListener
-        (Listener: IGnuGettextInstanceWhenNewLanguageListener);
-      begin
-        fWhenNewLanguageListeners.Add(Listener);
-      end;
-
-      procedure TGnuGettextInstance.RetranslateComponent(AnObject: TComponent;
-        const textdomain: DomainString);
-      var
-        comp: TGnuGettextComponentMarker;
-      begin
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln
-          ('======================================================================');
-        DebugWriteln
-          ('RetranslateComponent() was called for a component with name ' +
-          AnObject.name + '.');
-{$ENDIF}
-        comp := AnObject.FindComponent('GNUgettextMarker')
-          as TGnuGettextComponentMarker;
-        if comp = nil then
-        begin
-{$IFDEF DXGETTEXTDEBUG}
-          DebugWriteln
-            ('Retranslate was called on an object that has not been translated before. An Exception is being raised.');
-{$ENDIF}
-          raise EGGProgrammingError.Create
-            ('Retranslate was called on an object that has not been translated before. Please use TranslateComponent() before RetranslateComponent().');
-        end
-        else
-        begin
-          // *** if param ReReadMoFileOnSameLanguage is set, use the ReTranslate
-          // function nevertheless if the current language is the same like the
-          // new (-> reread the current .mo-file from the file system).
-          if ReReadMoFileOnSameLanguage or (comp.LastLanguage <> curlang) then
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('The retranslator is being executed.');
-{$ENDIF}
-            comp.Retranslator.Execute;
-          end
-          else
-          begin
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln
-              ('The language has not changed. The retranslator is not executed.');
-{$ENDIF}
-          end;
-        end;
-        comp.LastLanguage := curlang;
-
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln
-          ('======================================================================');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TP_IgnoreClass(IgnClass: TClass);
-      var
-        cm: TClassMode;
-        i: Integer;
-      begin
-        for i := 0 to TP_ClassHandling.Count - 1 do
-        begin
-          cm := TObject(TP_ClassHandling.Items[i]) as TClassMode;
-          if cm.HClass = IgnClass then
-            raise EGGProgrammingError.Create
-              ('You cannot add a class to the ignore list that is already on that list: '
-              + IgnClass.ClassName + '.');
-          if IgnClass.InheritsFrom(cm.HClass) then
-          begin
-            // This is the place to insert this class
-            cm := TClassMode.Create;
-            cm.HClass := IgnClass;
-            TP_ClassHandling.insert(i, cm);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Locally, class ' + IgnClass.ClassName +
-              ' is being ignored.');
-{$ENDIF}
-            exit;
-          end;
-        end;
-        cm := TClassMode.Create;
-        cm.HClass := IgnClass;
-        TP_ClassHandling.Add(cm);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Locally, class ' + IgnClass.ClassName +
-          ' is being ignored.');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.TP_IgnoreClassProperty(IgnClass: TClass;
-        propertyname: ComponentNameString);
-      var
-        cm: TClassMode;
-        i: Integer;
-      begin
-        propertyname := uppercase(propertyname);
-        for i := 0 to TP_ClassHandling.Count - 1 do
-        begin
-          cm := TObject(TP_ClassHandling.Items[i]) as TClassMode;
-          if cm.HClass = IgnClass then
-          begin
-            if Assigned(cm.SpecialHandler) then
-              raise EGGProgrammingError.Create
-                ('You cannot ignore a class property for a class that has a handler set.');
-            cm.PropertiesToIgnore.Add(propertyname);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Globally, the ' + propertyname + ' property of class '
-              + IgnClass.ClassName + ' is being ignored.');
-{$ENDIF}
-            exit;
-          end;
-          if IgnClass.InheritsFrom(cm.HClass) then
-          begin
-            // This is the place to insert this class
-            cm := TClassMode.Create;
-            cm.HClass := IgnClass;
-            cm.PropertiesToIgnore.Add(propertyname);
-            TP_ClassHandling.insert(i, cm);
-{$IFDEF DXGETTEXTDEBUG}
-            DebugWriteln('Locally, the ' + propertyname + ' property of class '
-              + IgnClass.ClassName + ' is being ignored.');
-{$ENDIF}
-            exit;
-          end;
-        end;
-        cm := TClassMode.Create;
-        cm.HClass := IgnClass;
-        cm.PropertiesToIgnore.Add(propertyname);
-        TP_GlobalClassHandling.Add(cm);
-{$IFDEF DXGETTEXTDEBUG}
-        DebugWriteln('Locally, the ' + propertyname + ' property of class ' +
-          IgnClass.ClassName + ' is being ignored.');
-{$ENDIF}
-      end;
-
-      procedure TGnuGettextInstance.FreeTP_ClassHandlingItems;
-      begin
-        while TP_ClassHandling.Count <> 0 do
-        begin
-          TObject(TP_ClassHandling.Items[0]).Free;
-          TP_ClassHandling.delete(0);
-        end;
-      end;
-
-{$IFNDEF UNICODE}
-      function TGnuGettextInstance.ansi2wideDTCP(const s: AnsiString)
-        : MsgIdString;
-{$IFDEF MSWindows}
-      var
-        Len: Integer;
-{$ENDIF}
-      begin
-{$IFDEF MSWindows}
-        if DesignTimeCodePage = CP_ACP then
-        begin
-          // No design-time codepage specified. Using runtime codepage instead.
-{$ENDIF}
-          Result := s;
-{$IFDEF MSWindows}
-        end
-        else
-        begin
-          Len := length(s);
-          if Len = 0 then
-            Result := ''
-          else
-          begin
-            SetLength(Result, Len);
-            Len := MultiByteToWideChar(DesignTimeCodePage, 0, PAnsiChar(s), Len,
-              PWideChar(Result), Len);
-            if Len = 0 then
-              raise EGGAnsi2WideConvError.Create
-                ('Cannot convert string to widestring:' + sLinebreak + s);
-            SetLength(Result, Len);
-          end;
-        end;
-{$ENDIF}
-      end;
-{$ENDIF}
-{$IFNDEF UNICODE}
-      function TGnuGettextInstance.dngettext(const szDomain: DomainString;
-        const singular, plural: AnsiString; Number: Integer)
-        : TranslatedUnicodeString;
-      begin
-        Result := dngettext(szDomain, ansi2wideDTCP(singular),
-          ansi2wideDTCP(plural), Number);
-      end;
-{$ENDIF}
-    { TClassMode }
-
-      constructor TClassMode.Create;
-      begin
-        PropertiesToIgnore := TStringList.Create;
-        PropertiesToIgnore.Sorted := True;
-        PropertiesToIgnore.Duplicates := dupError;
-        PropertiesToIgnore.CaseSensitive := false;
-      end;
-
-      destructor TClassMode.Destroy;
-      begin
-        FreeAndNil(PropertiesToIgnore);
-        inherited;
-      end;
-
-    { TFileLocator }
-
-      function TFileLocator.FindSignaturePos(const signature: RawByteString;
-        str: TFileStream): int64;
-      // Finds the position of signature in the file.
-      const
-        bufsize = 100000;
-      var
-        a: RawByteString;
-        b: RawByteString;
-        Offset: Integer;
-        rd, p: Integer;
-      begin
-        if signature = '' then
-        begin
-          Result := 0;
-          exit;
-        end;
-
-        Offset := 0;
-        str.Seek(0, soFromBeginning);
-
-        SetLength(a, bufsize);
-        SetLength(b, bufsize);
-        str.Read(a[1], bufsize);
-
-        while True do
-        begin
-          rd := str.Read(b[1], bufsize);
-          p := pos(signature, a + b);
-          if (p <> 0) then
-          begin // do not check p < bufsize+100 here!
-            Result := Offset + p - 1;
-            exit;
-          end;
-          if rd <> bufsize then
-          begin
-            // Prematurely ended without finding anything
-            Result := 0;
-            exit;
-          end;
-          a := b;
-          Offset := Offset + bufsize;
-        end;
-        Result := 0;
-      end;
-
-    // Changed to "Analyze" with old signature to be compatible to older programs
-    // and to the assemble routine in GgtTranslate
-    // JR - 2012-09-10
-      procedure TFileLocator.Analyze;
-      var
-        s: AnsiString;
-        i: Integer;
-        Offset: int64;
-        fs: TFileStream;
-        fi: TEmbeddedFileInfo;
-        Filename: TFileName;
-        // change from FilenameString to AnsiString, JR - 2010-04-10
-      begin
-        // "ggassemble" will search for this GUI and replace the trailing #0s by a pointer
-        // to the begin of the embedded mo files
-        s := '6637DB2E-62E1-4A60-AC19-C23867046A89'#0#0#0#0#0#0#0#0; // constant
-        s := MidStr(s, length(s) - 7, 8);
-        Offset := 0;
-        for i := 8 downto 1 do
-          Offset := Offset shl 8 + ord(s[i]);
-        if Offset = 0 then
-          exit;
-        basedirectory := extractfilepath(ExecutableFilename);
-        try
-          fs := TFileStream.Create(ExecutableFilename, fmOpenRead or
-            fmShareDenyNone);
-          try
-            while True do
-            begin
-              fs.Seek(Offset, soFromBeginning);
-              Offset := ReadInt64(fs);
-              if Offset = 0 then
-                exit;
-              fi := TEmbeddedFileInfo.Create;
-              try
-                fi.Offset := ReadInt64(fs);
-                fi.Size := ReadInt64(fs);
-                SetLength(filename, Offset - fs.Position);
-                fs.ReadBuffer(filename[1], Offset - fs.Position);
-                filename := trim(filename);
-                if PreferExternal and System.SysUtils.FileExists
-                  (basedirectory + filename) then
-                begin
-                  // Disregard the internal version and use the external version instead
-                  FreeAndNil(fi);
-                end
-                else
-                  filelist.AddObject(filename, fi);
-              except
-                FreeAndNil(fi);
-                raise;
-              end;
-            end;
-          finally
-            FreeAndNil(fs);
-          end;
-        except
-{$IFDEF DXGETTEXTDEBUG}
-          raise;
-{$ENDIF}
-        end;
-      end;
-
-    (* procedure TFileLocator.Analyze;
-      var
-      HeaderSize,
-      PrefixSize: Integer;
-      dummysig,
-      headerpre,
-      headerbeg,
-      headerend:RawByteString;
-      i:integer;
-      headerbeginpos,
-      headerendpos:integer;
-      offset,
-      tableoffset:int64;
-      fs:TFileStream;
-      fi:TEmbeddedFileInfo;
-      filename:FilenameString;
-      filename8bit:RawByteString;
-      const
-      // DetectionSignature: used solely to detect gnugettext usage by assemble
-      DetectionSignature: array[0..35] of AnsiChar='2E23E563-31FA-4C24-B7B3-90BE720C6B1A';
-      // Embedded Header Begin Signature (without dynamic prefix written by assemble)
-      BeginHeaderSignature: array[0..35] of AnsiChar='BD7F1BE4-9FCF-4E3A-ABA7-3443D11AB362';
-      // Embedded Header End Signature (without dynamic prefix written by assemble)
-      EndHeaderSignature: array[0..35] of AnsiChar='1C58841C-D8A0-4457-BF54-D8315D4CF49D';
-      // Assemble Prefix (do not put before the Header Signatures!)
-      SignaturePrefix: array[0..2] of AnsiChar='DXG'; // written from assemble
-      begin
-      // Attn: Ensure all Signatures have the same size!
-      HeaderSize := High(BeginHeaderSignature) - Low(BeginHeaderSignature) + 1;
-      PrefixSize := High(SignaturePrefix) - Low(SignaturePrefix) + 1;
-
-      // dummy usage of DetectionSignature (otherwise not compiled into exe)
-      SetLength(dummysig, HeaderSize);
-      for i := 0 to HeaderSize-1 do
-      dummysig[i+1] := DetectionSignature[i];
-
-      // copy byte by byte (D2009+ compatible)
-      SetLength(headerpre, PrefixSize);
-      for i:= 0 to PrefixSize-1 do
-      headerpre[i+1] := SignaturePrefix[i];
-
-      SetLength(headerbeg, HeaderSize);
-      for i:= 0 to HeaderSize-1 do
-      headerbeg[i+1] := BeginHeaderSignature[i];
-
-      SetLength(headerend, HeaderSize);
-      for i:= 0 to HeaderSize-1 do
-      headerend[i+1] := EndHeaderSignature[i];
-
-      BaseDirectory:=ExtractFilePath(ExecutableFilename);
-      try
-      fs:=TFileStream.Create(ExecutableFilename,fmOpenRead or fmShareDenyNone);
-      try
-      // try to find new header begin and end signatures
-      headerbeginpos := FindSignaturePos(headerpre+headerbeg, fs);
-      headerendpos := FindSignaturePos(headerpre+headerend, fs);
-
-      if (headerbeginpos > 0) and (headerendpos > 0) then
-      begin
-      // adjust positions (to the end of each signature)
-      headerbeginpos := headerbeginpos + HeaderSize + PrefixSize;
-
-      // get file table offset (8 byte, stored directly before the end header)
-      fs.Seek(headerendpos - 8, soFromBeginning);
-      // get relative offset and convert to absolute offset during runtime
-      tableoffset := headerbeginpos + ReadInt64(fs);
-
-      // go to beginning of embedded block
-      fs.Seek(headerbeginpos, soFromBeginning);
-
-      offset := tableoffset;
-      Assert(sizeof(offset)=8);
-      while (true) and (fs.Position<headerendpos) do begin
-      fs.Seek(offset,soFromBeginning);
-      offset:=ReadInt64(fs);
-      if offset=0 then
-      exit;
-      offset:=headerbeginpos+offset;
-      fi:=TEmbeddedFileInfo.Create;
-      try
-      // get embedded file info (adjusting dynamic to real offsets now)
-      fi.Offset:=headerbeginpos+ReadInt64(fs);
-      fi.Size:=ReadInt64(fs);
-      SetLength (filename8bit, offset-fs.position);
-      fs.ReadBuffer (filename8bit[1], offset-fs.position);
-      filename:=trim(utf8decode(filename8bit));
-      if PreferExternal and sysutils.fileexists(basedirectory+filename) then begin
-      // Disregard the internal version and use the external version instead
-      FreeAndNil (fi);
-      end else
-      filelist.AddObject(filename,fi);
-      except
-      FreeAndNil (fi);
-      raise;
-      end;
-      end;
-      end;
-      finally
-      FreeAndNil (fs);
-      end;
-      except
-      {$ifdef DXGETTEXTDEBUG}
-      raise;
-      {$endif}
-      end;
-      end; *)
-
-      constructor TFileLocator.Create;
-      begin
-        MoFilesCS := TMultiReadExclusiveWriteSynchronizer.Create;
-        MoFiles := TStringList.Create;
-        filelist := TStringList.Create;
-{$IFDEF LINUX}
-        filelist.Duplicates := dupError;
-        filelist.CaseSensitive := True;
-{$ENDIF}
-        MoFiles.Sorted := True;
-        MoFiles.Duplicates := dupError;
-        MoFiles.CaseSensitive := false;
-{$IFDEF MSWINDOWS}
-        filelist.Duplicates := dupError;
-        filelist.CaseSensitive := false;
-{$ENDIF}
-        filelist.Sorted := True;
-      end;
-
-      destructor TFileLocator.Destroy;
-      begin
-        while filelist.Count <> 0 do
-        begin
-          filelist.Objects[0].Free;
-          filelist.delete(0);
-        end;
-        FreeAndNil(filelist);
-        FreeAndNil(MoFiles);
-        FreeAndNil(MoFilesCS);
-        inherited;
-      end;
-
-      function TFileLocator.FileExists(filename: FilenameString): boolean;
-      var
-        idx: Integer;
-      begin
-        if LeftStr(filename, length(basedirectory)) = basedirectory then
-        begin
-          // Cut off basedirectory if the file is located beneath that base directory
-          filename := MidStr(filename, length(basedirectory) + 1, maxint);
-        end;
-        Result := filelist.Find(filename, idx);
-      end;
-
-      function TFileLocator.GetMoFile(filename: FilenameString;
-        DebugLogger: TDebugLogger): TMoFile;
-      var
-        fi: TEmbeddedFileInfo;
-        idx: Integer;
-        idxname: FilenameString;
-        Offset, Size: int64;
-        realfilename: FilenameString;
-      begin
-        // Find real filename
-        Offset := 0;
-        Size := 0;
-        realfilename := filename;
-        if LeftStr(filename, length(basedirectory)) = basedirectory then
-        begin
-          filename := MidStr(filename, length(basedirectory) + 1, maxint);
-          idx := filelist.IndexOf(filename);
-          if idx <> -1 then
-          begin
-            fi := filelist.Objects[idx] as TEmbeddedFileInfo;
-            realfilename := ExecutableFilename;
-            Offset := fi.Offset;
-            Size := fi.Size;
-{$IFDEF DXGETTEXTDEBUG}
-            DebugLogger('Instead of ' + filename + ', using ' + realfilename +
-              ' from offset ' + IntToStr(Offset) + ', size ' + IntToStr(Size));
-{$ENDIF}
-          end;
-        end;
-
-{$IFDEF DXGETTEXTDEBUG}
-        DebugLogger('Reading .mo data from file ''' + filename + '''');
-{$ENDIF}
-        // Find TMoFile object
-        MoFilesCS.BeginWrite;
-        try
-          idxname := realfilename + ' //\\ ' + IntToStr(Offset);
-          if MoFiles.Find(idxname, idx) then
-          begin
-            Result := MoFiles.Objects[idx] as TMoFile;
-          end
-          else
-          begin
-            Result := TMoFile.Create(realfilename, Offset, Size,
-              UseMemoryMappedFiles);
-            MoFiles.AddObject(idxname, Result);
-          end;
-          inc(Result.Users);
-        finally
-          MoFilesCS.EndWrite;
-        end;
-      end;
-
-      function TFileLocator.ReadInt64(str: TStream): int64;
-      begin
-        Assert(SizeOf(Result) = 8);
-        str.ReadBuffer(Result, 8);
-      end;
-
-      procedure TFileLocator.ReleaseMoFile(mofile: TMoFile);
-      var
-        i: Integer;
-      begin
-        Assert(mofile <> nil);
-
-        MoFilesCS.BeginWrite;
-        try
-          dec(mofile.Users);
-          if mofile.Users <= 0 then
-          begin
-            i := MoFiles.Count - 1;
-            while i >= 0 do
-            begin
-              if MoFiles.Objects[i] = mofile then
-              begin
-                MoFiles.delete(i);
-                FreeAndNil(mofile);
-                break;
-              end;
-              dec(i);
-            end;
-          end;
-        finally
-          MoFilesCS.EndWrite;
-        end;
-      end;
-
-    { TTP_Retranslator }
-
-      constructor TTP_Retranslator.Create;
-      begin
-        list := TList.Create;
-      end;
-
-      destructor TTP_Retranslator.Destroy;
-      var
-        i: Integer;
-      begin
-        for i := 0 to list.Count - 1 do
-          TObject(list.Items[i]).Free;
-        FreeAndNil(list);
-        inherited;
-      end;
-
-      procedure TTP_Retranslator.Execute;
-      var
-        i: Integer;
-        sl: TStrings;
-        item: TTP_RetranslatorItem;
-        newvalue: TranslatedUnicodeString;
-        comp: TGnuGettextComponentMarker;
-        ppi: PPropInfo;
-      begin
-        for i := 0 to list.Count - 1 do
-        begin
-          item := TObject(list.Items[i]) as TTP_RetranslatorItem;
-          if not Assigned(item.obj) then
-            continue; // JR 20223-04-18 to avoid protection faults
-          if item.obj is TComponent then
-          begin
-            comp := TComponent(item.obj).FindComponent('GNUgettextMarker')
-              as TGnuGettextComponentMarker;
-            if Assigned(comp) and (self <> comp.Retranslator) then
-            begin
-              comp.Retranslator.Execute;
-              continue;
-            end;
-          end;
-          if item.obj is TStrings then
-          begin
-            // Since we don't know the order of items in sl, and don't have
-            // the original .Objects[] anywhere, we cannot anticipate anything
-            // about the current sl.Strings[] and sl.Objects[] values. We therefore
-            // have to discard both values. We can, however, set the original .Strings[]
-            // value into the list and retranslate that.
-            sl := TStringList.Create;
-            try
-              sl.Text := item.OldValue;
-              Instance.TranslateStrings(sl, textdomain);
-              (item.obj as TStrings).BeginUpdate;
-              try
-                (item.obj as TStrings).Text := sl.Text;
-              finally
-                (item.obj as TStrings).EndUpdate;
-              end;
-            finally
-              FreeAndNil(sl);
-            end;
-          end
-          else
-          begin
-            if (textdomain = '') or (textdomain = DefaultTextDomain) then
-              newvalue := ComponentGettext(item.OldValue, Instance)
-            else
-              newvalue := Instance.dgettext(textdomain, item.OldValue);
-            ppi := GetPropInfo(item.obj, item.Propname);
-            if ppi <> nil then
-            begin
-              SetWideStrProp(item.obj, ppi, newvalue);
-            end
-            else
-            begin
-{$IFDEF DXGETTEXTDEBUG}
-              Instance.DebugWriteln
-                ('ERROR: On retranslation, property disappeared: ' +
-                item.Propname + ' for object of type ' + item.obj.ClassName);
-{$ENDIF}
-            end;
-          end;
-        end;
-      end;
-
-      procedure TTP_Retranslator.Remember(obj: TObject;
-        Propname: ComponentNameString; OldValue: TranslatedUnicodeString);
-      var
-        item: TTP_RetranslatorItem;
-      begin
-        item := TTP_RetranslatorItem.Create;
-        item.obj := obj;
-        item.Propname := Propname;
-        item.OldValue := OldValue;
-        list.Add(item);
-      end;
-
-    { TGnuGettextComponentMarker }
-
-      destructor TGnuGettextComponentMarker.Destroy;
-      begin
-        FreeAndNil(Retranslator);
-        inherited;
-      end;
-
-    { THook }
-
-      constructor THook.Create(OldProcedure, NewProcedure: pointer;
-        FollowJump: boolean = false);
-      { Idea and original code from Igor Siticov }
-      { Modified by Jacques Garcia Vazquez and Lars Dybdahl }
-      begin
-{$IFNDEF CPU386}
-{$IFNDEF CPUx64}
-        raise Exception.Create
-          ('This procedure only works on Intel i386 or x64 compatible processors.');
-{$ENDIF}
-{$ENDIF}
-        oldproc := OldProcedure;
-        newproc := NewProcedure;
-
-        Reset(FollowJump);
-      end;
-
-      destructor THook.Destroy;
-      begin
-        Shutdown;
-        inherited;
-      end;
-
-      procedure THook.Disable;
-      begin
-        Assert(PatchPosition <> nil,
-          'Patch position in THook was nil when Disable was called');
-        PatchPosition[0] := Original[0];
-        PatchPosition[1] := Original[1];
-        PatchPosition[2] := Original[2];
-        PatchPosition[3] := Original[3];
-        PatchPosition[4] := Original[4];
-      end;
-
-      procedure THook.Enable;
-      begin
-        Assert(PatchPosition <> nil,
-          'Patch position in THook was nil when Enable was called');
-        PatchPosition[0] := Patch[0];
-        PatchPosition[1] := Patch[1];
-        PatchPosition[2] := Patch[2];
-        PatchPosition[3] := Patch[3];
-        PatchPosition[4] := Patch[4];
-      end;
-
-      procedure THook.Reset(FollowJump: boolean);
-      var
-        Offset: Integer;
-{$IFDEF LINUX}
-        p: pointer;
-        pagesize: Integer;
-{$ENDIF}
-{$IFDEF MSWindows}
-        ov: Cardinal;
-{$ENDIF}
-      begin
-        if PatchPosition <> nil then
-          Shutdown;
-
-        PatchPosition := oldproc;
-        if FollowJump and (Word(oldproc^) = $25FF) then
-        begin
-          // This finds the correct procedure if a virtual jump has been inserted
-          // at the procedure address
-          inc(PatchPosition, 2); // skip the jump
-          PatchPosition := PAnsiChar(pointer(pointer(PatchPosition)^)^);
-        end;
-        Offset := Integer(newproc) - Integer(pointer(PatchPosition)) - 5;
-
-        Patch[0] := ansichar($E9);
-        Patch[1] := ansichar(Offset and 255);
-        Patch[2] := ansichar((Offset shr 8) and 255);
-        Patch[3] := ansichar((Offset shr 16) and 255);
-        Patch[4] := ansichar((Offset shr 24) and 255);
-
-        Original[0] := PatchPosition[0];
-        Original[1] := PatchPosition[1];
-        Original[2] := PatchPosition[2];
-        Original[3] := PatchPosition[3];
-        Original[4] := PatchPosition[4];
-
-{$IFDEF MSWINDOWS}
-        if not VirtualProtect(pointer(PatchPosition), 5,
-          PAGE_EXECUTE_READWRITE, @ov) then
-          RaiseLastOSError;
-{$ENDIF}
-{$IFDEF LINUX}
-        pagesize := sysconf(_SC_PAGE_SIZE);
-        p := pointer(PatchPosition);
-        p := pointer((Integer(p) + pagesize - 1) and not(pagesize - 1) -
-          pagesize);
-        if mprotect(p, pagesize, PROT_READ + PROT_WRITE + PROT_EXEC) <> 0 then
-          RaiseLastOSError;
-{$ENDIF}
-      end;
-
-      procedure THook.Shutdown;
-      begin
-        Disable;
-        PatchPosition := nil;
-      end;
-
-      procedure HookIntoResourceStrings(enabled: boolean = True;
-        SupportPackages: boolean = false);
-      begin
-        HookLoadResString.Reset(SupportPackages);
-        HookLoadStr.Reset(SupportPackages);
-        HookFmtLoadStr.Reset(SupportPackages);
-        if enabled then
-        begin
-          HookLoadResString.Enable;
-          HookLoadStr.Enable;
-          HookFmtLoadStr.Enable;
-        end;
-      end;
-
-    { TMoFile }
-
-      function TMoFile.autoswap32(i: Cardinal): Cardinal;
-      var
-        cnv1, cnv2: record case Integer of 0: (arr: array [0 .. 3] of byte);
-        1: (int: Cardinal);
-      end;
-
-  begin
-    if doswap then
-    begin
-      cnv1.int := i;
-      cnv2.arr[0] := cnv1.arr[3];
-      cnv2.arr[1] := cnv1.arr[2];
-      cnv2.arr[2] := cnv1.arr[1];
-      cnv2.arr[3] := cnv1.arr[0];
-      Result := cnv2.int;
-    end
-    else
-      Result := i;
-  end;
-
-  function TMoFile.CardinalInMem(baseptr: PAnsiChar; Offset: Cardinal)
-    : Cardinal;
-  var
-    pc: ^Cardinal;
-  begin
-    inc(baseptr, Offset);
-    pc := pointer(baseptr);
-    Result := pc^;
-    if doswap then
-      autoswap32(Result);
-  end;
-
-  constructor TMoFile.Create(const filename: FilenameString;
-    const Offset: int64; Size: int64; const xUseMemoryMappedFiles: boolean);
-  var
-    i: Cardinal;
-    nn: Integer;
-    mofile: TFileStream;
-  begin
-    if SizeOf(i) <> 4 then
-      raise EGGProgrammingError.Create
-        ('TDomain in gnugettext is written for an architecture that has 32 bit integers.');
-
-{$IFDEF mswindows}
-    FUseMemoryMappedFiles := xUseMemoryMappedFiles;
-{$ENDIF}
-{$IFDEF linux}
-    FUseMemoryMappedFiles := false;
-{$ENDIF}
-    if FUseMemoryMappedFiles then
-    begin
-      // Map the mo file into memory and let the operating system decide how to cache
-      mo := createfile(PChar(filename), GENERIC_READ, FILE_SHARE_READ, nil,
-        OPEN_EXISTING, 0, 0);
-      if mo = INVALID_HANDLE_VALUE then
-        raise EGGIOError.Create('Cannot open file ' + filename);
-      momapping := CreateFileMapping(mo, nil, PAGE_READONLY, 0, 0, nil);
-      if momapping = 0 then
-        raise EGGIOError.Create('Cannot create memory map on file ' + filename);
-      momemoryHandle := MapViewOfFile(momapping, FILE_MAP_READ, 0, 0, 0);
-      if momemoryHandle = nil then
-      begin
-        raise EGGIOError.Create('Cannot map file ' + filename +
-          ' into memory. Reason: ' + GetLastWinError);
-      end;
-      momemory := momemoryHandle + Offset;
-    end
-    else
-    begin
-      // Read the whole file into memory
-      mofile := TFileStream.Create(filename, fmOpenRead or fmShareDenyNone);
-      try
-        if (Size = 0) then
-          Size := mofile.Size;
-        Getmem(momemoryHandle, Size);
-        momemory := momemoryHandle;
-        mofile.Seek(Offset, soFromBeginning);
-        mofile.ReadBuffer(momemory^, Size);
-      finally
-        FreeAndNil(mofile);
-      end;
-    end;
-
-    // Check the magic number
-    doswap := false;
-    i := CardinalInMem(momemory, 0);
-    if (i <> $950412DE) and (i <> $DE120495) then
-      raise EGGIOError.Create('This file is not a valid GNU gettext mo file: ' +
-        filename);
-    doswap := (i = $DE120495);
-
-    // Find the positions in the file according to the file format spec
-    CardinalInMem(momemory, 4);
-    // Read the version number, but don't use it for anything.
-    N := CardinalInMem(momemory, 8); // Get string count
-    O := CardinalInMem(momemory, 12); // Get offset of original strings
-    T := CardinalInMem(momemory, 16); // Get offset of translated strings
-
-    // Calculate start conditions for a binary search
-    nn := N;
-    startindex := 1;
-    while nn <> 0 do
-    begin
-      nn := nn shr 1;
-      startindex := startindex shl 1;
-    end;
-    startindex := startindex shr 1;
-    startstep := startindex shr 1;
-  end;
-
-  destructor TMoFile.Destroy;
-  begin
-    if FUseMemoryMappedFiles then
-    begin
-      UnMapViewOfFile(momemoryHandle);
-      try
-        CloseHandle(momapping);
-      except
-      end;
-      try
-        CloseHandle(mo);
-      except
-      end;
-    end
-    else
-    begin
-      FreeMem(momemoryHandle);
-    end;
-
-    inherited;
-  end;
-
-  function TMoFile.gettext(const msgid: RawUtf8String; var found: boolean)
-    : RawUtf8String;
-  var
-    i, step: Cardinal;
-    Offset, pos: Cardinal;
-    CompareResult: Integer;
-    msgidptr, a, b: PAnsiChar;
-    abidx: Integer;
-    Size, msgidsize: Integer;
-  begin
-    found := false;
-    msgidptr := PAnsiChar(msgid);
-    msgidsize := length(msgid);
-
-    // Do binary search
-    i := startindex;
-    step := startstep;
-    while True do
-    begin
-      // Get string for index i
-      pos := O + 8 * (i - 1);
-      Offset := CardinalInMem(momemory, pos + 4);
-      Size := CardinalInMem(momemory, pos);
-      a := msgidptr;
-      b := momemory + Offset;
-      abidx := Size;
-      if msgidsize < abidx then
-        abidx := msgidsize;
-      CompareResult := 0;
-      while abidx <> 0 do
-      begin
-        CompareResult := Integer(byte(a^)) - Integer(byte(b^));
-        if CompareResult <> 0 then
-          break;
-        dec(abidx);
-        inc(a);
-        inc(b);
-      end;
-      if CompareResult = 0 then
-        CompareResult := msgidsize - Size;
-      if CompareResult = 0 then
-      begin // msgid=s
-        // Found the msgid
-        pos := T + 8 * (i - 1);
-        Offset := CardinalInMem(momemory, pos + 4);
-        Size := CardinalInMem(momemory, pos);
-        SetString(Result, momemory + Offset, Size);
-        found := True;
-        break;
-      end;
-      if step = 0 then
-      begin
-        // Not found
-        Result := msgid;
-        break;
-      end;
-      if CompareResult < 0 then
-      begin // msgid<s
-        if i < 1 + step then
-          i := 1
-        else
-          i := i - step;
-        step := step shr 1;
-      end
-      else
-      begin // msgid>s
-        i := i + step;
-        if i > N then
-          i := N;
-        step := step shr 1;
-      end;
-    end;
-  end;
-
-var
-  param0: string;
-
-initialization
-
-{$IFDEF DXGETTEXTDEBUG}
-{$IFDEF MSWINDOWS}
-  MessageBox(0,
-  'gnugettext.pas debugging is enabled. Turn it off before releasing this piece of software.',
-  'Information', MB_OK);
-{$ENDIF}
-{$IFDEF LINUX}
-writeln(stderr,
-  'gnugettext.pas debugging is enabled. Turn it off before releasing this piece of software.');
-{$ENDIF}
-{$ENDIF}
-{$IFDEF FPC}
-{$IFDEF LINUX}
-SetLocale(LC_ALL, '');
-SetCWidestringManager;
-{$ENDIF LINUX}
-{$ENDIF FPC}
-// Get DLL/shared object filename
-SetLength(ExecutableFilename, 300); // MAX_PATH ?
-{$IFDEF MSWINDOWS}
-SetLength(ExecutableFilename, GetModuleFileName(HInstance,
-  PChar(ExecutableFilename), length(ExecutableFilename)));
-{$ENDIF}
-{$IFDEF LINUX}
-if ModuleIsLib or ModuleIsPackage then
-begin
-  // This line has not been tested on Linux, yet, but should work.
-  SetLength(ExecutableFilename, GetModuleFileName(0, PChar(ExecutableFilename),
-    length(ExecutableFilename)));
-end
-else
-  ExecutableFilename := Paramstr(0);
-{$ENDIF}
-FileLocator := TFileLocator.Create;
-FileLocator.Analyze;
-ResourceStringDomainList := TStringList.Create;
-ResourceStringDomainList.Add(DefaultTextDomain);
-ResourceStringDomainListCS := TMultiReadExclusiveWriteSynchronizer.Create;
-ComponentDomainList := TStringList.Create;
-ComponentDomainList.Add(DefaultTextDomain);
-ComponentDomainListCS := TMultiReadExclusiveWriteSynchronizer.Create;
-DefaultInstance := TGnuGettextInstance.Create;
-{$IFDEF MSWINDOWS}
-Win32PlatformIsUnicode := (Win32Platform = VER_PLATFORM_WIN32_NT);
-{$ENDIF}
-
-// replace Borlands LoadResString with gettext enabled version:
-{$IFDEF UNICODE}
-HookLoadResString := THook.Create(@System.LoadResString, @LoadResStringW);
-{$ELSE}
-HookLoadResString := THook.Create(@System.LoadResString, @LoadResStringA);
-{$ENDIF}
-HookLoadStr := THook.Create(@System.SysUtils.LoadStr, @SysUtilsLoadStr);
-HookFmtLoadStr := THook.Create(@System.SysUtils.FmtLoadStr,
-  @SysUtilsFmtLoadStr);
-param0 := lowercase(extractfilename(Paramstr(0)));
-if (param0 <> 'delphi32.exe') and (param0 <> 'kylix') and (param0 <> 'bds.exe')
-then
-  HookIntoResourceStrings(AutoCreateHooks, false);
-param0 := '';
-
-finalization
-
-FreeAndNil(DefaultInstance);
-FreeAndNil(ResourceStringDomainListCS);
-FreeAndNil(ResourceStringDomainList);
-FreeAndNil(ComponentDomainListCS);
-FreeAndNil(ComponentDomainList);
-FreeAndNil(HookFmtLoadStr);
-FreeAndNil(HookLoadStr);
-FreeAndNil(HookLoadResString);
-FreeAndNil(FileLocator);
-
-end.

+ 0 - 41
Src/gnuGettextInit.pas

@@ -1,41 +0,0 @@
-(* Delphi-Unit -
-   Initialization for GnuGetText
-   =============================
-
-   © Dr. J. Rathlev, D-24222 Schwentinental (kontakt(a)rathlev-home.de)
-
-   The contents of this file may be used under the terms of the
-   Mozilla Public License ("MPL") or
-   GNU Lesser General Public License Version 2 or later (the "LGPL")
-
-   Software distributed under this License is distributed on an "AS IS" basis,
-   WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
-   the specific language governing rights and limitations under the License.
-
-   Vers. 1 - July 2023
-   last mdified: July 2023
-   *)
-
-unit GnuGetTextInit;
-
-interface
-
-// InitTranslation has to be placed in the project file before "Application.Initialize"
-// "Domains" is a list of all po/mo files needed by the application
-// Calling sample: InitTranslation(['delphi10','indy10']);
-procedure InitTranslation (const Domains : array of string);
-
-implementation
-
-uses GnuGetText;
-
-{ ------------------------------------------------------------------- }
-// InitTranslation has to be placed in the project file before "Application.Initialize"
-procedure InitTranslation (const Domains : array of string);
-var
-  i  : integer;
-begin
-  for i:=0 to High(Domains) do AddDomainForResourceString(Domains[i]);
-  end;
-
-end.