<?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[map Deklaration. C++ technisch ok?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bin auf der Suche nach einer geeigneten Datenstruktur für mein entstehendes Internationalisierungstool.<br />
Prinzipiell soll es ähnlich wie das bekannte <em>gettext</em> ablaufen:<br />
Es gibt die englischen Standard-Vorgabenachrichten, die MSGIDs und es kann keine, eine oder mehrere Übersetzungen für jede MSGIDs geben. Jede Sprache hat dabei eine eindeutige Identifikationsnummer (lang_id).</p>
<pre><code>MSGID            lang_id    MSGSTR
&quot;Hello world!&quot;   1		 &quot;Hallo Welt!&quot;
                 2         &quot;Hola mundo!&quot;
                 3         &quot;Ahoj svět!&quot;
				... usw
</code></pre>
<p>Beim Suchen im Forum bin ich auf <em>map</em> gestossen und habe mir das hier zurechtgetippt:</p>
<pre><code class="language-cpp">map &lt;string, map &lt;int, string&gt; &gt; langfiles;
</code></pre>
<p>Gibts ne bessere Möglichkeit, oder ist es so machbar, bzw. steht mir Schiffbruch bevor?</p>
<p>Gruß,<br />
c.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/245572/map-deklaration-c-technisch-ok</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 15:38:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/245572.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 15 Jul 2009 19:34:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Wed, 15 Jul 2009 19:34:45 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich bin auf der Suche nach einer geeigneten Datenstruktur für mein entstehendes Internationalisierungstool.<br />
Prinzipiell soll es ähnlich wie das bekannte <em>gettext</em> ablaufen:<br />
Es gibt die englischen Standard-Vorgabenachrichten, die MSGIDs und es kann keine, eine oder mehrere Übersetzungen für jede MSGIDs geben. Jede Sprache hat dabei eine eindeutige Identifikationsnummer (lang_id).</p>
<pre><code>MSGID            lang_id    MSGSTR
&quot;Hello world!&quot;   1		 &quot;Hallo Welt!&quot;
                 2         &quot;Hola mundo!&quot;
                 3         &quot;Ahoj svět!&quot;
				... usw
</code></pre>
<p>Beim Suchen im Forum bin ich auf <em>map</em> gestossen und habe mir das hier zurechtgetippt:</p>
<pre><code class="language-cpp">map &lt;string, map &lt;int, string&gt; &gt; langfiles;
</code></pre>
<p>Gibts ne bessere Möglichkeit, oder ist es so machbar, bzw. steht mir Schiffbruch bevor?</p>
<p>Gruß,<br />
c.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743761</guid><dc:creator><![CDATA[datenstruktur creat0r]]></dc:creator><pubDate>Wed, 15 Jul 2009 19:34:45 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Wed, 15 Jul 2009 19:47:56 GMT]]></title><description><![CDATA[<p>brauchst du wirklich ne map für die lang_id? tuts nicht auch ein vektor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743771</guid><dc:creator><![CDATA[diesem Beitrag deaktivier]]></dc:creator><pubDate>Wed, 15 Jul 2009 19:47:56 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Wed, 15 Jul 2009 19:49:46 GMT]]></title><description><![CDATA[<p>Warum machst du nicht</p>
<pre><code class="language-cpp">std::map&lt;std::string,std::vector&lt;string&gt;&gt; langfiles;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1743772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743772</guid><dc:creator><![CDATA[Samsn]]></dc:creator><pubDate>Wed, 15 Jul 2009 19:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Wed, 15 Jul 2009 23:28:32 GMT]]></title><description><![CDATA[<p>Grundsätzlich würde ich's so machen, aber die erste Map über die lang_id laufen lassen.</p>
<p>Da man aber die Sprache nur sehr selten auswählt (in der Regel ja wohl nur einmal bei jedem Start des Programms), würde ich bei einer konkreten Implementierung wohl auf die zweite Map verzichten. Etwa so:</p>
<pre><code class="language-cpp">std::string translate(const std::string &amp;message) {

   static bool initialized = false;
   static std::map&lt;std::string, std::string&gt; messages;

   if(!initialized) {
      int lang_id getLanguage();
      initMessages(messages, lang_id);
      initialized = true;
   }
   return messages[message];
}
</code></pre>
<p>Und wahrscheinlich wäre das Ganze bei mir wohl auch ein Singleton.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743860</guid><dc:creator><![CDATA[Grautvornix]]></dc:creator><pubDate>Wed, 15 Jul 2009 23:28:32 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Wed, 15 Jul 2009 23:40:48 GMT]]></title><description><![CDATA[<p>Samsn schrieb:</p>
<blockquote>
<p>Warum machst du nicht</p>
<pre><code class="language-cpp">std::map&lt;std::string,std::vector&lt;string&gt;&gt; langfiles;
</code></pre>
</blockquote>
<p>diesem Beitrag deaktivier schrieb:</p>
<blockquote>
<p>brauchst du wirklich ne map für die lang_id? tuts nicht auch ein vektor?</p>
</blockquote>
<p>Angenommen ich will die Übersetzungen mit lang_id 5 und 14 von insgesamt 32 möglichen lang_ids ändern.<br />
Ok, geht, wenn ich den Vector von Index 0 bis 31 mit NULL vorbelege und an Pos. 5 und 14 die Übersetzungen aufsuche. Sollte wohl keine allzugroße Speicherverschwendung sein.</p>
<p>Grautvornix schrieb:</p>
<blockquote>
<p>Da man aber die Sprache nur sehr selten auswählt (in der Regel ja wohl nur einmal bei jedem Start des Programms), würde ich bei einer konkreten Implementierung wohl auf die zweite Map verzichten.</p>
</blockquote>
<h2>Stimmt, im Programmverlauf ja, da genügt eine Map.</h2>
<p>Das ganze hätte ich noch etwas klarer beschreiben sollen: Das ganze muss ja auch verwaltet werden, d.h. die Übersetzungen können sich ändern, können gelöscht werden und es können neue hinzukommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743862</guid><dc:creator><![CDATA[datenstruktur creat0r]]></dc:creator><pubDate>Wed, 15 Jul 2009 23:40:48 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 08:45:25 GMT]]></title><description><![CDATA[<p>datenstruktur creat0r schrieb:</p>
<blockquote>
<p>Das ganze hätte ich noch etwas klarer beschreiben sollen: Das ganze muss ja auch verwaltet werden, d.h. die Übersetzungen können sich ändern, können gelöscht werden und es können neue hinzukommen.</p>
</blockquote>
<p>Das verwirrt mich ein bischen. Befinden sich die Übersetzungen nicht letztlich in Dateien? Dann wäre es doch naheliegend, die Übersetzungen zu laden, wenn man sie braucht, ganz gleich, ob zur Bearbeitung oder zur Verwendung. Man hätte immer nur die Übersetzungen für eine einzige Sprache im Speicher.</p>
<p>Oder übersehe ich da was?</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743974</guid><dc:creator><![CDATA[Grautvornix]]></dc:creator><pubDate>Thu, 16 Jul 2009 08:45:25 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 08:55:16 GMT]]></title><description><![CDATA[<p>Je nach Anzahl vorhandener Texte rate ich auch zu einer Lösung mit Dateien. Je nach Anzahl unterstützter Sprachen kann das eine ganze Menge Memory verbraten, auf den du zur Laufzeit so gut wie nie zurückgreifst. Wie oft wechselt der Anwender die Sprache.<br />
Hinterlege dir die Texte doch z.B. in XML-Dateien, wobei der Name einer XML-Datei die LanguageId bzw. Sprache ist.</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743981</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Thu, 16 Jul 2009 08:55:16 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 09:47:53 GMT]]></title><description><![CDATA[<p>Anfangs wollte ich die Übersetzungen aller Sprachen in einer einzigen Datei speichern<br />
(map &lt;string, map &lt;int, string&gt;&gt; langfiles),<br />
aber das würde wohl doch unnötig kompliziert werden. Für jede Sprache eine separate Datei anzulegen, scheint mir doch die bessere Wahl zu sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1743998</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1743998</guid><dc:creator><![CDATA[datenstruktur creat0r]]></dc:creator><pubDate>Thu, 16 Jul 2009 09:47:53 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 10:29:02 GMT]]></title><description><![CDATA[<p>datenstruktur creat0r schrieb:</p>
<blockquote>
<p>Anfangs wollte ich die Übersetzungen aller Sprachen in einer einzigen Datei speichern<br />
(map &lt;string, map &lt;int, string&gt;&gt; langfiles),<br />
aber das würde wohl doch unnötig kompliziert werden. Für jede Sprache eine separate Datei anzulegen, scheint mir doch die bessere Wahl zu sein.</p>
</blockquote>
<p>Naja... Die Datei-Struktur muss sich ja nicht unbedingt in den Datenstrukturen des Programms widerspiegeln. Selbst wenn es nur eine Datei für alle Sprachen wäre (was ich bevorzugen würde), könnte man doch aus der Datei nur eine Sprache lesen. Es hängt wohl vom Dateiformat ab, ob dies kompliziert wäre.</p>
<p>Stefan.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744027</guid><dc:creator><![CDATA[DStefan]]></dc:creator><pubDate>Thu, 16 Jul 2009 10:29:02 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 10:40:54 GMT]]></title><description><![CDATA[<p>Grautvornix schrieb:</p>
<blockquote>
<p>Da man aber die Sprache nur sehr selten auswählt (in der Regel ja wohl nur einmal bei jedem Start des Programms), würde ich bei einer konkreten Implementierung wohl auf die zweite Map verzichten.</p>
</blockquote>
<p>Das ist ein verfrühter Schluß, der schon bei gettext dazu geführt hat, dass es nicht kontextsensitiv ist. Was machst Du denn z.B. in einer (C++)-Webanwendung, wo der Client entscheidet, welche Sprache er sprechen möchte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744034</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 16 Jul 2009 10:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 11:09:13 GMT]]></title><description><![CDATA[<p>DStefan schrieb:</p>
<blockquote>
<p>Naja... Die Datei-Struktur muss sich ja nicht unbedingt in den Datenstrukturen des Programms widerspiegeln. Selbst wenn es nur eine Datei für alle Sprachen wäre (was ich bevorzugen würde), könnte man doch aus der Datei nur eine Sprache lesen. Es hängt wohl vom Dateiformat ab, ob dies kompliziert wäre.<br />
Stefan.</p>
</blockquote>
<p>Dann müsste aber auch jeder User die Datei mit allen Übersetzungen vorrätig haben. Ok, das Programm ist klein, es gibt nicht viele Nachrichtenstrings, wäre also auch vertretbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744048</guid><dc:creator><![CDATA[datenstruktur creat0r]]></dc:creator><pubDate>Thu, 16 Jul 2009 11:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 11:19:08 GMT]]></title><description><![CDATA[<p>datenstruktur creat0r schrieb:</p>
<blockquote>
<p>Dann müsste aber auch jeder User die Datei mit allen Übersetzungen vorrätig haben. Ok, das Programm ist klein, es gibt nicht viele Nachrichtenstrings, wäre also auch vertretbar.</p>
</blockquote>
<p>Der User muss aber auch das Programm vorrätig haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /><br />
Installier doch einfach die Datei mit! Wenn sie vom nicht auffindbar ist, dann muss halt der Anwender mit den Strings aus dem Quelltext zurecht kommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /></p>
<p>Und wenn du Angs hast dass die Datei viel Speicher braucht, binde doch zip-Kompression ein. (libzip)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744061</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744061</guid><dc:creator><![CDATA[MiniDu]]></dc:creator><pubDate>Thu, 16 Jul 2009 11:19:08 GMT</pubDate></item><item><title><![CDATA[Reply to map Deklaration. C++ technisch ok? on Thu, 16 Jul 2009 12:59:39 GMT]]></title><description><![CDATA[<p>Noch ein Vorteil, wenn du je Sprache ein File nimmst: Wenn du es geschickt anstellst, kannst du Sprachen nachinstallieren :-). Nur ein Hinweis meinerseits, falls du Lust auf Featurites hast ;-).</p>
<p>Gruß Kimmi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1744208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1744208</guid><dc:creator><![CDATA[kimmi]]></dc:creator><pubDate>Thu, 16 Jul 2009 12:59:39 GMT</pubDate></item></channel></rss>