<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[MultiLanguage-Support mit Satellite DLLs]]></title><description><![CDATA[<p>Hallo @all,</p>
<p>ich bin gerade dabei ein Programm von mir für die Nutzung verschiedener Sprachen umzustellen.<br />
Ich möchte das so umsetzen, dass ich die einzelnen Ressourcen in dedizierte Sprach-DLLs auslagere.</p>
<p>Das funktioniert soweit auch recht gut, jetzt habe ich nur ein Problem. Wenn die Sprache innerhalb der Dialoganwendung &quot;on-the-fly&quot; umgestellt werden soll, ändern sich alle Dialoge die neu initialisiert werden.</p>
<p>Das Problem ist, dass der Hauptdialog nicht geupdatet wird. Gibt es eine Möglichkeit zu forcieren, dass auch im Hauptdialog die Ressourcen neu geladen werden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ein einfaches Invalidate() zum Neuzeichnen des Bildschirmbereichs bzw. AfxSetResourceHandle(hInst); reicht leider nicht aus, wie gesagt nur für die neu erzeugten Dialoge.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170676/multilanguage-support-mit-satellite-dlls</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 16:35:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170676.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Jan 2007 13:48:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Thu, 18 Jan 2007 13:48:09 GMT]]></title><description><![CDATA[<p>Hallo @all,</p>
<p>ich bin gerade dabei ein Programm von mir für die Nutzung verschiedener Sprachen umzustellen.<br />
Ich möchte das so umsetzen, dass ich die einzelnen Ressourcen in dedizierte Sprach-DLLs auslagere.</p>
<p>Das funktioniert soweit auch recht gut, jetzt habe ich nur ein Problem. Wenn die Sprache innerhalb der Dialoganwendung &quot;on-the-fly&quot; umgestellt werden soll, ändern sich alle Dialoge die neu initialisiert werden.</p>
<p>Das Problem ist, dass der Hauptdialog nicht geupdatet wird. Gibt es eine Möglichkeit zu forcieren, dass auch im Hauptdialog die Ressourcen neu geladen werden? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ein einfaches Invalidate() zum Neuzeichnen des Bildschirmbereichs bzw. AfxSetResourceHandle(hInst); reicht leider nicht aus, wie gesagt nur für die neu erzeugten Dialoge.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212040</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Thu, 18 Jan 2007 13:48:09 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Thu, 18 Jan 2007 22:36:07 GMT]]></title><description><![CDATA[<p>Genau diese Frage habe ich mir vor einigen Jahren auch gestellt.<br />
Ich gehe davon aus, dass du für jede Sprache eine reine Resource-DLL (/NOENTRY) hast, die nach Umstellung auf eine andere Sprache geladen werden soll.</p>
<p>Du kannst Deinen Dialog programmtechnisch erzeugen (also nicht über ein Dialog Template im Resource Editor), alle Texte aus dem Stringtable laden, und nach ändern der Sprache alle Controls nach dem Aufruf von AfxSetResourceHandle(hInst) über LoadString(..) neu beschreiben.</p>
<p>Das Problem liegt darin, dass das &quot;Basistemplate&quot; (bei MDI/SDI sind das z.B. Menüs, bei Dialogapplikationen halt der erste &quot;Basisdialog&quot;) geladen wird, und bis zum Programmende gültig bleibt.</p>
<p>Daher, so habe ich es gelöst, eine freundliche Meldung an den Endanwender:</p>
<p>&quot;Diese Änderungen erfordern einen Neustart des Programmes.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212362</guid><dc:creator><![CDATA[Gio]]></dc:creator><pubDate>Thu, 18 Jan 2007 22:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Fri, 19 Jan 2007 07:55:15 GMT]]></title><description><![CDATA[<p>Oh nein Gio, genau auf diese Antwort habe ich NICHT gehofft. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Genau wie du es beschrieben hast habe ich die Ressourcen-DLLs erzeugt.</p>
<p>Aber ich habe irgendwie noch die Hoffnung, dass es trotzdem auch für eine Dialoganwendung funktionieren müsste.<br />
Wenn man eine Menüanwendung hat, gibt es die Möglichkeit ein Handle auf das Menü zu holen, das Menü zu zerstören und dann neu aus der Ressource einzulesen und die View upzudaten.</p>
<p>Kann man nicht auf irgendeine Weise den 1. Dialog zerstören und sofort wieder neu einlesen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212434</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Fri, 19 Jan 2007 07:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Fri, 19 Jan 2007 07:59:30 GMT]]></title><description><![CDATA[<p>Wie das sauber geht, weiss ich leider auch nicht...<br />
Ich würde aber versuchen den Hauptdialog zu schliessen mittels EndModalLoop()<br />
und dann wieder anzeigen.</p>
<p>Wie gesagt nur eine Vermutung..........</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212436</guid><dc:creator><![CDATA[DaDings]]></dc:creator><pubDate>Fri, 19 Jan 2007 07:59:30 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Fri, 19 Jan 2007 08:14:41 GMT]]></title><description><![CDATA[<p>Dressman1981 schrieb:</p>
<blockquote>
<p>Wenn man eine Menüanwendung hat, gibt es die Möglichkeit ein Handle auf das Menü zu holen, das Menü zu zerstören und dann neu aus der Ressource einzulesen und die View upzudaten.</p>
</blockquote>
<p>Aber selbst das ist unvollständig. Man muss die Doc-Templates alle neu aufbauen, ohne die alten Daten zu verändern.<br />
Intern in der MFC gibt es einigen Code der nicht so einfach neu geladen werden kann.</p>
<p>Dressman1981 schrieb:</p>
<blockquote>
<p>Kann man nicht auf irgendeine Weise den 1. Dialog zerstören und sofort wieder neu einlesen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Es kann dazu keine Technik geben, denn aus den Ressourcen wird einfach in einer Schleife CreateWindow durchgeführt. Und wenn ActiveX Controls im Spiel ist macht die MFC noch ganz andere verrückte Sachen.</p>
<p>Wenn Dein Dialog gut konzipiert ist, dann werden alle Daten mit DoDataExchange geladen und gespeichert. Also einfach EndDialog(IDC_LANGCHANGE); (o.ä.) durchführen und den Dialog neu starten.</p>
<p>Aber wichtig! Vorher das m_pMainWnd auf NULL setzen und nach dem erneuten Start wieder setzen. Sonst wird WM_QUIT versendet!</p>
<p>PS: Die Diskussion um eine direkte Sprachumschaltung ist alt. Nur finde ich sie absolut überflüssig. Ein User startet ein Programm und wählt seine Sprache. Das macht er wahrscheinlich genau einmal nach der Installation! Danach wird er die Sprache behalten. Warum darf man ihn für diesen einen Fall nicht zu einem Neustart bitten?<br />
Just my 2 cents</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1212444</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1212444</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Fri, 19 Jan 2007 08:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Sat, 20 Jan 2007 09:30:41 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Warum darf man ihn für diesen einen Fall nicht zu einem Neustart bitten?<br />
Just my 2 cents</p>
</blockquote>
<p>Wenn ich MFC verwende mache ich es auch genauso (also mit Neustart). Allerdings lade ich meine Strings dann trotzdem lieber aus einem .ini File - aber das ist Geschmackssache.</p>
<p>Gegenfrage: wieso verwendet man nicht einfach eine Library die problemlos on-the-fly Sprachen umschalten ermöglicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213066</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213066</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 20 Jan 2007 09:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Sat, 20 Jan 2007 12:44:18 GMT]]></title><description><![CDATA[<p>Hallo und danke für alle Antworten und Tipps!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>:<br />
Die Idee mit den ini-Dateien ist mir auch zunächst gekommen.<br />
Teilweise kann es aber erforderlich sein einen Dialog bzw. die Bilder etc. sprachspezifisch anzupassen, da ist der Weg über die RessourcenDLLs sinnvoller.</p>
<p>Wie würdest du denn vorgehen, um solch eine Library zu erstellen, die in der Lage ist die Sprachen on-the-fly umzustellen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213140</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Sat, 20 Jan 2007 12:44:18 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Sat, 20 Jan 2007 17:44:30 GMT]]></title><description><![CDATA[<p>Dressman1981 schrieb:</p>
<blockquote>
<p>Wie würdest du denn vorgehen, um solch eine Library zu erstellen, die in der Lage ist die Sprachen on-the-fly umzustellen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>On the fly ist immer ein Problem, denn es gibt einfach Speicher der allokiert wurde, Stringvariablen, die irgendwo im Speichermanagament rumliegen und schon hat man beim umstellen ein Problem.</p>
<p>Ich finde es viel lästiger, dass es mühsamst ist, auch Message-Boxen und Standdard-Dialogein der entsprechenden Sprache anzuzeigen.</p>
<p>Du bist immer noch eine Erklärung schuldig warum On-The-Fly soooo wichtig ist. Siehemeine Frage und Erklärung in einem früheren Posting.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213313</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Sat, 20 Jan 2007 17:44:30 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Sat, 20 Jan 2007 22:03:09 GMT]]></title><description><![CDATA[<p>Dressman1981 schrieb:</p>
<blockquote>
<p>Wie würdest du denn vorgehen, um solch eine Library zu erstellen, die in der Lage ist die Sprachen on-the-fly umzustellen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Ich würde so eine Library nicht erstellen, sondern erstmal gucken ob's nicht schon was fertiges gibt was das kann. Sollte es für C++ wirklich nixe geben, dann würde ich auf jeden Fall die Dialoge programmatisch aufbauen, und nicht aus Templates. Dabei kommen dann diverse Hilfklassen zum Einsatz die z.B. Elemente übereinander/nebeneinander anordnen etc. - so wie man das halt auch aus Java kennt.</p>
<p>Jedes Element hat dabei ein paar Standardeigenschaften, z.B. minimale und maximale Breite/Höhe. Wenn sich der Text eines Buttons z.B. ändert, dann ändert sich automatisch auch dessen minimale Breite. Die Layout Hilfsklassen müssen dann dafür sorgen dass diese min/max Werte (wenn möglich - das Fenster kann ja nicht unendlich gross werden) eingehalten werden.</p>
<p>Beim anlegen eines Buttons z.B. gibst du dem dann nicht den Text mit den er anzeigen soll, sondern die Text ID. Die Library weiss dann welche Sprache gerade eingestellt ist, und lädt den String von wo-auch-immer.</p>
<p>Wenn man dann die Sprache umschalten will muss man bloss alle Elemente des Dialoges durchgehen, die Strings neu laden, und dann die Layout-Hilfsklassen neu arbeiten lassen.</p>
<p>Strings die man im Programm selbst angreifen muss holt man sich dabei am besten immer vom &quot;String-Loader&quot; - der kann ja Strings auch ohne weiteres cachen - dann bremst das auch nicht schlimm.</p>
<p>----</p>
<p>Da sowas selbst zu entwickeln aber viel viel Arbeit ist würde ich wie gesagt gucken ob es nicht bereits eine Library für Windows gibt die das kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1213455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1213455</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 20 Jan 2007 22:03:09 GMT</pubDate></item><item><title><![CDATA[Reply to MultiLanguage-Support mit Satellite DLLs on Mon, 22 Jan 2007 07:35:39 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a> Richter:<br />
Es gibt keine Vorgabe oder Ähnliches, warum ich die Sprache direkt im Programmablauf umstellen möchte. Ich will mich trotz alledem informieren, ob soetwas möglich ist und wenn ja wie, da ich es persönlich angenehmer und irgendwie auch professioneller finden würde.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13960">@hustbaer</a>:<br />
Danke noch mal für dein ausführliches Posting.<br />
Ich habe bereits vor dem Eröffnen meiner Frage auf den gängigen Seiten geschaut (<a href="http://www.codeproject.com" rel="nofollow">www.codeproject.com</a> bzw. <a href="http://www.codeguru.com" rel="nofollow">www.codeguru.com</a>) und da nur allgemeine Vorschläge bezüglich der RessourcenDLL's gefunden.</p>
<p>Auf jeden Fall hört sich deine Beschreibung recht gut an. Ich werde mal noch weiter suchen und wenn ich soetwas nicht finden sollte wohl selbst in Angriff nehmen.</p>
<p>@all: Falls jemanden durch Zufall mal solch eine Klasse beim Durchstöbern des Netzes auffallen sollte, wäre es super, wenn das jemand hier posten könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1214194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1214194</guid><dc:creator><![CDATA[Dressman1981]]></dc:creator><pubDate>Mon, 22 Jan 2007 07:35:39 GMT</pubDate></item></channel></rss>